2009-07-16 13 views
0

効率的な実装について質問があります。2つの配列のアイテムを比較/ソートする最も効率的な方法は何ですか?

 
One array is all possible items in a house: Table, Chair, TV, Fireplace, Bed 

The other is an array of items in a particular house: Table, TV, Bed 

私はまた、2つのリストボックスがあります:

 
1. listbox for items in the house - the "HAS" list box 
2. listbox items not in the house - the "NEEDS" list box 

私は「HAS」リストボックスなどの項目に家に既に項目をリストする必要があり、私は二つの配列を考えてみましょう「ニーズ」リストボックスの家にはありません。ネストされた「For Each」ループはこの問題を解決するための最初のスタートになると思われますが、どのケースをネストする必要があるのか​​正確にはわかりません。このようなタスクを達成する最も効率的な方法は何ですか?

答えて

3
var allItems = (new [] {"Table", "Chair", "TV", "Fireplace", "Bed"}); 
var hasItems = (new [] {"Table", "Chair"}); 

var hasList = hasItems.ToList(); 
var needsList = allItems.Except(hasItems).ToList(); 
+0

Enumerable.Uceptを実装するだけで、実際には内部のSetクラスを使用するので、実際には同じパフォーマンスを提供する必要があります。実際に私はこれについて以前は分かりませんでした。 –

1
var allList = (new [] {"Table", "Chair", "TV", "Fireplace", "Bed"}).ToList(); 
var hasList = (new [] {"Table", "Chair"}).ToList(); 

var hasSet = new HashSet<string>(hasList); 
var needsList = allList.Where(i => !hasList.Contains(i)).ToList(); 

これは〜最速の解決策です(少なくともbig O notation)。

+1

まず、HashSetは一般的なので、HashSet を指定する必要があります。第二に、私はあなたが含まれていないことを意味すると思います。ロジックは次のようになります。 var needsList = allList.Where(i =>!hasList.Contains(i))。ToList(); – Charlie

+0

はい - ありがと;)私はちょうどソースを修正しました。 –