【问题标题】:c# sort list by input index appearance in the list [closed]c#按列表中的输入索引外观对列表进行排序[关闭]
【发布时间】:2015-01-26 07:38:58
【问题描述】:

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

我希望按照名字和姓氏中输入的索引对这个列表进行排序,优先于名字。示例:

用户输入字符串:Da

期望的结果: “大卫加尔” “美国爸爸” “亚当·琼斯”

示例说明: “David Gal”是第一位的,因为“Da”在名字中的索引是 0。 “America Dad”排在第二位,因为“Da”也是姓氏中的第一位,但当索引相等时,姓氏的优先级低于名字。 “Adam Jones”排在最后,因为“Da”在他的名字中出现的指数最低。

编辑: 我找到了答案,但我没有足够的声誉来回答自己,所以这里是:

listToSort.OrderBy(contact => 
               contact.Name
                 .Split(' ')
                 .Select((WordInName, WordIndex) => 
                         (uint)WordInName.IndexOf(SearchString, StringComparison.CurrentCultureIgnoreCase) + WordIndex / ((double)WordIndex + 1)
                                )
                                .Min()
                        );

【问题讨论】:

  • list.Where( 你的代码在这里 ).OrderBy( 你的代码在这里 ),用你自己的尝试(如果需要,也可以添加 .ToList())。
  • 用户输入中的名称是如何分隔的?
  • 我从用户输入创建正则表达式,如下所示:wordRegex = new BsonRegularExpression(word + ".*", "im");。比,使用 mongodriver 库我做这个查询: Query.EQ(x => x.Name, wordRegex)
  • 问题现已结束。如果/当它重新打开时,您需要将问题的答案作为实际答案发布,并从问题中删除您的答案。它与您现在无法发布的声誉无关。有些人在遇到问题时会使用太宽泛接近的理由,而这些问题说明了他们想要做什么却没有付出任何努力。我不认为您的问题宽泛,但似乎宽泛。

标签: c# .net linq list search


【解决方案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());

【讨论】:

  • 谢谢,效果很好。我会请我的工作人员向我解释它是如何工作的。
  • @DavidG- 这没有按预期工作。检查这个dotnetfiddle.net/vKkBHE
  • @Rahul Singh 感谢您的指出。我简单地检查了一下,一开始看起来还不错。如果没有人在我之前这样做,我会尝试花费它并发布答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多