c#按列表中的输入索引外观排序列表

时间:2014-11-27 16:31:10

标签: c# .net linq list search

在我的代码中,我从用户那里得到一个字符串作为输入,并向他返回一个名称(字符串)列表,其中包含用户输入的内部。

我希望按照名字和姓氏中的输入索引对此列表进行排序,优先级为第一个名称。例如:

用户输入字符串: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()
                        );

1 个答案:

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