아티스트라는 개체가 있습니다. 나는 예술가가 메인 프로그램에서 예술가의 내 목록에 포함되어 있는지 여부를 확인하려고C# 비교자를 사용하여 개체 바이너리 검색
public class CompareArtists : IComparer<Artist>
{
public int Compare(Artist x, Artist y)
{
if (x.artistID == null) return -1;
if (y.artistID == null) return 1;
return String.Compare(x.artistID, y.artistID);
}
}
이 같은 사용자 정의 비교자를 가지고
public class Artist
{
public string artistID { get; set; }
public string artistName { get; set; }
public Artist(string artistID, string artistName)
{
this.artistID = artistID;
this.artistName = artistName;
}
public Artist()
{
}
public Artist(string artistID)
{
this.artistID = artistID;
}
. 그리고 이렇게 그 일 오전 :
Artist tempArtist = new Artist(user[1]);
Artist result = new Artist();
position = artists.BinarySearch(tempArtist, dc);
result = artists.ElementAt(position);
users.ElementAt(counter).favoriteArtists.Add(result,Int32.Parse(user[2]));
binarysearch의 결과를, 내가 MSDN에 무엇을 읽고, 다음 가장 큰 인덱스의 보완에서 음수입니다. 결과가 나오지 않을 때 표시됩니다. 그러나 나는 내가 아티스트 목록에서 찾고있는 항목이 실제로 거기에 존재한다는 것을 100 % 확신합니다. 선형 방법을 사용할 때 (예 : 예술가. 단 하나 예술가. 발견하십시오, 나는 결과를 얻는다.
비교 자 또는 바이너리 검색 사용 방법에 문제가 있습니까?
ps : dc는 내 비교 자입니다 : CompareArtists dc = new CompareArtists(); 및 user []는 스트림 리더로 읽은 행에서 분리 된 문자열 배열입니다. 그것은
당신은BinarySearch
하기 전에 목록을 정렬 할 필요가
를 작동되도록하려면? 정렬 된 목록에서만'BinarySearch'를 사용할 수 있기 때문입니다. –
또한 두 명의 아티스트 (둘 다 null ID를 가짐)가 제시되면 비교 자의 경우 잘못된 것을 수행합니다. 이 경우 0을 반환해야합니다. –
목록은 ID가 실제로 주문 된 파일을 읽음으로써 순차적으로 생성됩니다. 그래서 나는 그렇다고 말할 것입니다. 이것이 의미하는 바라면 –