如何选择非独特元素及其索引

Pri*_*aka 3 c# linq

 List<string> str = new List<string>() {
   "Alpha", "Beta", "Alpha", "Alpha", "Gamma", "Beta", "XYZ" };
Run Code Online (Sandbox Code Playgroud)

预期产量:

 String | Indexes
 ----------------------------
 Alpha  | 0, 2, 3
 Beta   | 1, 5
Run Code Online (Sandbox Code Playgroud)

GammaXYZ是不同的话,它们将被忽略.

我通过手动比较字符串来完成此操作.是否有可能以更简单的方式使用LINQ

dig*_*All 5

这样的事情应该有效:

var elements = str
    .Select((Elem, Idx) => new {Elem, Idx})
    .GroupBy(x => x.Elem)
    .Where(x => x.Count() > 1);
Run Code Online (Sandbox Code Playgroud)

如果您希望Dictionary<string,List<int>>将重复的字符串作为键并将索引作为值,则只需添加

.ToDictionary(x => x.Key, x => x.Select(e => e.Idx).ToList() );
Run Code Online (Sandbox Code Playgroud)

Where()


Mar*_*ell 5

foreach (var grp in
   str.Select((s, i) => new { s, i })
      .ToLookup(pair => pair.s, pair => pair.i)
      .Where(pair => pair.Count() > 1))
{   
    Console.WriteLine("{0}: {1}", grp.Key, string.Join(", ", grp));
}
Run Code Online (Sandbox Code Playgroud)