【发布时间】:2011-09-12 23:30:10
【问题描述】:
我正在尝试编写一个自定义比较器来根据相似性对搜索结果列表进行排序。我希望与输入的搜索词最相似的词首先出现在列表中,然后是以搜索词组开头的词组,然后是按字母顺序排列的所有其他值。
鉴于此测试代码:
string searchTerm = "fleas";
List<string> list = new List<string>
{
"cat fleas",
"dog fleas",
"advantage fleas",
"my cat has fleas",
"fleas",
"fleas on my cat"
};
我正在尝试使用这个比较器:
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(new MatchComparer(searchTerm) 会导致列表顶部的“我的猫有跳蚤”。
我想我一定是在做一些奇怪/奇怪的事情......这里有什么问题还是有更好的方法来解决我正在尝试做的事情?
谢谢!
【问题讨论】:
标签: c# linq contains compareto icomparer