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)
Gamma
和XYZ
是不同的话,它们将被忽略.
我通过手动比较字符串来完成此操作.是否有可能以更简单的方式使用LINQ?
这样的事情应该有效:
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()
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)
归档时间: |
|
查看次数: |
1145 次 |
最近记录: |