2010-01-19 2 views
2

다음은 arraylist에 저장된 데이터 형식입니다.ArrayList Search .net

A-Amsterdam 
B- Brussels 
C-Canada 

그래서 등. 내가 '-'까지 처음 몇 문자 만 전달하면 내 배열 목록을 검색 할 수 없다. 그래서 AA-Test와 같은 것이 있으면 'AA'를 전달하여 존재 여부를 확인하고 싶다.

나는 contains 나 binarysearch를 사용할 수 있지만 둘 다 객체를 비교할 때 내 목적을 달성하지 못한다는 것을 알고있다.

제안 사항 감사

답변

2

당신은 당신의 자신의 IComparer를 만들고 BinarySearch로 전달하여이 문제를 해결 할 수 있습니다

public class StartsWithComparer : IComparer 
{ 
    public int Compare(Object x, Object y) 
    { 
     String left = x as String; 
     String right = y as String; 

     if (ReferenceEquals(left, right)) 
     { 
      return 0; 
     } 

     if (ReferenceEquals(left, null)) 
     { 
      return -1; 
     } 

     if (ReferenceEquals(right, null)) 
     { 
      return 1; 
     } 

     return (x.StartsWith(y) || y.StartsWith(x)) ? 0 : x.CompareTo(y); 
    } 
} 

나중에 ...

myArrayList.Sort() 
myArrayList.BinarySearch("AA", new StartsWithComparer()); 
0

당신은 계정에의 크기를 가지고 할 수 있습니다 arraylist 및 수행 할 조회 수 :

데이터 세트에 많은 수의 요소가있는 경우 (큰 arraylist) 또는 많은 수의 검색의 알고리즘을 사용하려면 이진 검색과 같은 검색 알고리즘을 사용해야합니다.

데이터가 충분히 큰 경우 데이터에 액세스하려는 처음 몇 문자로 색인화 된 해시 테이블에 데이터를 저장하는 것이 좋습니다 귀하의 예에서 'AA').

마지막으로 작은 arraylist 크기와 많은 수의 조회의 경우 선형 비교와 동일한 비교 함수를 사용하면 실제로 성능이 향상 될 수 있습니다. 이 내용은 여기에서 더 자세히 논의되었습니다. At which n does binary search become faster than linear search on a modern CPU?