2016-03-21 26 views
2

başka Listesinden bir listesi nesnelere veri eklemek Birleştirme. Ancak oldukça uzun zaman alır çünkü her iki liste de oldukça büyüktür (lstA'da 70k öğelerinde ve lstB'de 20k öğelerinde).farklı türde iki Listeler

İhtiyacım olanı elde etmenin daha hızlı veya daha etkili bir yolu olup olmadığını merak ediyordum? Belki LINQ ile?

var joinedData = dataA.Join(dataB, dA => dA.ItemNo, dB => dB.ItemNo, (dA, dB) => new { dA, dB })); 
foreach(var pair in joinedData) 
{ 
    pair.dA.ItemDescription = pair.dB.ItemDescription; 
} 

Distinct, GroupBy ve Join işlemleri karma kullandığından, bunların O(N) yerine O(N²) yakın olmalıdır:

+0

Koleksiyonlar aynı uzunlukta ise .Zip() –

+1

kullanabilirsiniz. Verileri ItemNo'da sipariş verebileceğinizi varsayalım. Bunu el ile yapmak istiyorsanız (bazı kütüphane işlevlerini kullanmamanız durumunda) bunu yapabilirsiniz: her iki listeyi de ItemNo'ya göre sıralayın, verileri birleştirme türünde birleştirme adımına benzer şekilde ekleyin. Bu nlogn içinde çalışmalıdır. – Aziuth

cevap

2

Sen Join() ile O(n) karmaşıklık yerine O(N²) ile yapabilirsiniz.

+0

Doesnt Join, O (n^2) 'nin karmaşıklığına mı sahip? Yani çözümünüz O (n^3) – Domysee

+0

olur. Sadece [O (n)] 'ye yakın olduklarını öğrendiniz (http://stackoverflow.com/questions/2799427/what-guarantees-are-there-on-the -Çalıştır zamanlı karmaşıklığı-büyük-o-of-linq-yöntemi). Böylece çözümünüzün (n^2) O (n) O değil ( – Domysee

+0

@Domysee no) bir karmaşıklığı var, benim çözüm O (n) bir eşdeğer O (2n) karmaşıklığı vardır. N öğelerini iki kez yineliyorum ve O (n^2) N öğesinin N kez yinelediğini söylüyor. –

İlgili konular