0
我正在尝试编写自定义比较器来根据相似性对搜索结果列表进行排序。我希望最类似于输入搜索词的术语在列表中首先出现,然后是以搜索短语开头的短语,然后是按字母顺序排列的所有其他值。针对参数失败的自定义比较器
鉴于这种测试代码:
string searchTerm = "fleas";
List<string> list = new List<string>
{
"cat fleas",
"dog fleas",
"advantage fleas",
"my cat has fleas",
"fleas",
"fleas on my cat"
};
我试图用这个的Comparer:
public class MatchComparer : IComparer<string>
{
private readonly string _searchTerm;
public MatchComparer(string searchTerm)
{
_searchTerm = searchTerm;
}
public int Compare(string x, string y)
{
if (x.Equals(_searchTerm) ||
y.Equals(_searchTerm))
return 0;
if (x.StartsWith(_searchTerm) ||
y.StartsWith(_searchTerm))
return 0;
if (x.Contains(_searchTerm))
return 1;
if (y.Contains(_searchTerm))
return 1;
return x.CompareTo(y);
}
调用list.Sort(新MatchComparer(SEARCHTERM)会导致 '我的猫有跳蚤'在
列表的顶部。我想我必须做一些奇怪/这里怪异。是什么错在这里或者是有什么我试图做一个更好的方法?
谢谢!
太棒了!这似乎工作。谢谢 ! – duckus