Genel bir Listedeki AddRange ve Concat işlevleri arasındaki fark nedir ? Biri diğerine tavsiye edilir mi?
Yanıtlar:
Tamamen farklı anlamlara sahipler.
AddRange, listeye diğer öğeleri ekleyerek değiştirir.
Concat, listeyi değiştirmeden listeyi ve diğer öğeleri içeren yeni bir sıra döndürür.
Hangisinin istediğiniz semantiğe sahip olduğunu seçin.
En büyük fark, AddRange'ın çağrıldığı listeyi değiştirirken, Concat'ın yeni bir Liste oluşturmasıdır. Dolayısıyla farklı kullanımları var.
Ayrıca Concat, herhangi bir IEnumerable için geçerli olan ve yeni bir Liste oluşturmak için bir .ToList () 'e ihtiyacınız olan bir IEnumerable'ı döndüren bir genişletme yöntemidir.
Mevcut bir listenin içeriğini genişletmek istiyorsanız AddRange kullanın.
İki IEnumerable kaynağından yeni bir liste oluşturuyorsanız, Concat'ı .ToList ile kullanın. Bu, her iki kaynağı da değiştirmeyecek niteliktedir.
Yalnızca iki Listenin (veya başka bir IEnumerable) içeriğini numaralandırmanız gerekiyorsa, her seferinde Concat'ı kullanın, bu, birleştirilmiş listeyi tutmak için yeni bellek ayırmama avantajına sahiptir.
Bu 2 yapı arasındaki farkı anlatan ve performanslarını karşılaştıran bu ilginç makaleyi buldum ...
Ana fikir, AddRange'in büyük boyutlu koleksiyonlarla ilgili olduğunda çok daha hızlı olmasıdır.
İşte Bağlantı
Bu yardımcı olur umarım,
Concat
ve 100 kez birleştirilmiş / eklenmiş bir test yaptım ve çok daha hızlıydı. : Sonuçlar şunlardı 13 ms, 16.000 ms ve bir de sadece yapıyor sonunda: 2,700 ms. AddRange
List<KeyValuePair<string, string>>
AddRange
AddRange
Concat().ToList()
Concat
IEnumerable
ToList