C# 按列表中的输入索引外观对列表进行排序
本文关键字:列表 外观 排序 输入 索引 | 更新日期: 2023-09-27 18:32:20
在我的代码中,我从用户那里得到一个字符串作为输入,并返回给他一个名称(字符串)列表,这些名称(字符串)在它们本身中由用户输入组成。
我希望按名字和姓氏中输入的索引对此列表进行排序,并优先考虑名字。 示例:
用户输入字符串:Da
期望的结果:"大卫·加尔"《美国爸爸》《亚当·琼斯》
示例说明:"David Gal"是第一个,因为"Da"在名字中的索引是0。"美国爸爸"排在第二位,因为"Da"也是姓氏中的第一个,但当索引相等时,姓氏的优先级低于名字。"Adam Jones"排在最后,因为"Da"在他名字中的索引出现率最低。
编辑:我已经找到了答案,但我没有足够的声誉来回答自己,所以这里是:
listToSort.OrderBy(contact =>
contact.Name
.Split(' ')
.Select((WordInName, WordIndex) =>
(uint)WordInName.IndexOf(SearchString, StringComparison.CurrentCultureIgnoreCase) + WordIndex / ((double)WordIndex + 1)
)
.Min()
);
假设您的列表如下所示:
var input = new List<string>
{
"David Gal",
"American Dad",
"Adam Jones"
};
这将为您提供一个排序集:
var search = "da";
var results = input
.OrderBy(w =>
w.Split(' ')
.Select(x => x.ToLower().IndexOf(search)).Max());