在C#List中查找重复字符串的索引

Mar*_*ark 1 c# arrays list

我有一个字符串列表:

["String1"]
["String2"]
["String1"]
["String3"]
["String2"]
["String1"]
Run Code Online (Sandbox Code Playgroud)

我需要在List中搜索并找到"String1"的索引,并计算"String1"发生的次数.我已经回顾了这个答案,但我是C#中这种类型的编码的新手,我不清楚如何提取索引值,所以如果你能解释如何使用解决方案,那就太好了!

p.s*_*w.g 12

来自其他答案的代码,我将在这里复制以供参考,

var duplicates = data
  .Select((t,i) => new { Index = i, Text = t })
  .GroupBy(g => g.Text)
  .Where(g => g.Count() > 1);
Run Code Online (Sandbox Code Playgroud)

返回IEnumerableIGrouping,它本身就是一个IEnumerable匿名类型.您可以从结果中获取索引,如下所示:

foreach(var group in duplicates)
{
    Console.WriteLine("Duplicates of {0}:", group.Key)
    foreach(var x in group)
    {
        Console.WriteLine("- Index {0}:", x.Index)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想获取索引列表,则可以使用SelectMany扩展方法:

var duplicateIndexes = data
  .Select((t,i) => new { Index = i, Text = t })
  .GroupBy(g => g.Text)
  .Where(g => g.Count() > 1)
  .SelectMany(g => g, (g, x) => x.Index);
Run Code Online (Sandbox Code Playgroud)

这将返回IEnumerableint的.

  • @DanielA.White OP的问题是关于试图更好地理解*那个*代码.我在这里复制它以获得更好的上下文(因为OP没有将它包含在实际问题中).这对我来说似乎相当合理,因为我确实提供了解决OP特定问题的解释.您是否希望我只是链接到答案(可能会在将来编辑,破坏此上下文),或者编辑问题以包含OP混淆的代码? (4认同)
  • 为什么选择downvote?如果我的回答有问题,我很乐意纠正. (2认同)