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()
                        );

C# 按列表中的输入索引外观对列表进行排序

假设您的列表如下所示:

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());