【问题标题】:How to find certain strings in List<string> via LINQ?如何通过 LINQ 在 List<string> 中查找某些字符串?
【发布时间】:2012-06-26 15:14:03
【问题描述】:

我有这个List&lt;string&gt;

如何通过 LINQ 获取某些字符串?

我猜应该是这样的

List<string> test = new List<string>;

test.Add("1");

test.Add("2");

test.Add("1");


var dist = test.Where(s=>s  ==  "1") or ???

var dist = test.Distinct(a => a == "1"); ??? 

谢谢!

【问题讨论】:

  • 你试过用谷歌搜索你的问题吗?
  • 这显然是可以谷歌搜索的。
  • 给我时间编辑问题!
  • 您希望样本中的 dist 变量包含什么?
  • 离题但是......当人们向谷歌提出这个问题时,这很有趣,因为通常当我谷歌编程问题时,它会把我带到 SO。所以..如果它还没有在 SO.. 中回答。为什么不直接回答它,让未来的人们更容易找到正确的答案。谁知道它甚至可能通过提高知名度为 SO 带来新的才华横溢的程序员。只是一个想法。

标签: c# .net linq list


【解决方案1】:

尝试使用Distinct方法:

var dist = test.Distinct();

还有一个重载版本的Distinct 方法允许传递自定义比较器。

【讨论】:

    【解决方案2】:

    如果你想找出哪些字符串只在列表中出现一次,你可以使用它:

    List<string> test = new List<string>() { "1", "2", "1" };
    var distinctStrings = test.GroupBy(s => s).Where(g => g.Count() == 1).Select(g => g.Key);
    foreach (string str in distinctStrings)
        Console.WriteLine(str);
    

    【讨论】:

    • 但这不是问题;问题是获取所有不同的字符串。
    • 哦,你可以使用g.Skip(1).Any() 而不是g.Count() == 1,这样你就不需要迭代整个事情了。
    • 但也许 OP 想知道哪些是不同的。不制作现有字符串的不同列表。你确定不是这个问题吗?
    • @Servy 如果您查看标题,OP 想要“找到”不同的字符串,而不是使列表不同。
    • @itsme86 是的,Distinct 方法返回所有不同字符串的序列,而不是修改列表以删除所有非不同值,因此您“找到所有不同的字符串”。
    【解决方案3】:

    我找到了答案,伙计们!谢谢大家 ------ :)

    应该是这样的

    var dist = test.Where(a => a == "1"); 
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2013-08-28
      • 2013-03-30
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多