我有一个很大的字符串列表。我目前正在通过执行搜索来处理
.Where(x => x.Contains(search)).ToArray()
这得到了我想要的所有结果,但是顺序很差。例如,搜索“ch”可能会出现:
Potato Starch
Chicken
因为它们都包含 ch,所以我希望它们都出现,但我希望 Chicken 在数组中排在第一位,因为它以 ch 开头。
有哪些方法可以重新排序我的结果,以便以搜索字符串开头的字符串位于数组的开头?
您可以按索引排序,因此字符串以搜索开头:
.Where(x => x.Contains(search)).OrderBy(x => x.IndexOf(search)).ToArray()
尝试:
List<string> lis=new List<string>(){"Potato Starch","Chicken","gcha","vgfchi","njjh"};
string search = "ch";
List<string> temp = new List<string>();
temp = lis.Where(x => x.Contains(search)).OrderBy(x => x.IndexOf(search)).ToList();
您可以添加一个简单的OrderBy字段,将相关结果放在顶部:
.Where(x => x.Contains(search))
.OrderBy(x => x.StartsWith(search) ? 0 : 1)
.ThenBy(x => x)
.ToArray()
请注意,如果这是一个数据库查询(Linq to SQL/entities),您需要先枚举结果,因为引擎不知道如何将其转换为 SQL:
.Where(x => x.Contains(search))
.AsEnumerable()
.OrderBy(x => x.StartsWith(search) ? 0 : 1)
.ThenBy(x => x)
.ToArray()