2009-07-16 2 views
0

효율적인 구현에 대한 질문이 있습니다.두 배열의 항목을 비교/정렬하는 가장 효율적인 방법은 무엇입니까?

 
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 

나는 또한 두 개의 목록 상자가 :

 
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

예 - 감사합니다;) 나는 소스를 수정했습니다. –

관련 문제