在我的代码中,我从用户那里得到一个字符串作为输入,并向他返回一个名称(字符串)列表,其中包含用户输入的内部。
我希望按照名字和姓氏中的输入索引对此列表进行排序,优先级为第一个名称。例如:
用户输入字符串:Da
期望的结果: “大卫加尔” “美国爸爸” “亚当琼斯”
示例说明: “David Gal”首先是因为“Da”的索引在名字中为0。 “美国爸爸”是第二名,因为“Da”也是姓氏中的第一名,但是当索引相等时,姓氏的优先级低于名字。 “亚当琼斯”是最后一个因为“达”在他的名字中具有最低的索引外观。
修改 我找到了答案,但我没有足够的声誉回答自己,所以这里是:
listToSort.OrderBy(contact =>
contact.Name
.Split(' ')
.Select((WordInName, WordIndex) =>
(uint)WordInName.IndexOf(SearchString, StringComparison.CurrentCultureIgnoreCase) + WordIndex / ((double)WordIndex + 1)
)
.Min()
);
答案 0 :(得分:1)
假设您的列表如下所示:
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());