C# 如何选择非独立元素及其索引
C# 如何选择非独立元素及其索引,c#,linq,C#,Linq,Gamma和XYZ是不同的,因此它们被忽略 我通过手动比较字符串来实现这一点。是否有可能以更简单的方式使用LINQ进行操作?类似的方法应该可以: String | Indexes ---------------------------- Alpha | 0, 2, 3 Beta | 1, 5 如果你想得到一个字典,将重复的字符串作为键,索引作为值,只需添加 var elements = str .Select((Elem, Idx) => new {Elem, Id
Gamma
和XYZ
是不同的,因此它们被忽略
我通过手动比较字符串来实现这一点。是否有可能以更简单的方式使用LINQ进行操作?类似的方法应该可以:
String | Indexes
----------------------------
Alpha | 0, 2, 3
Beta | 1, 5
如果你想得到一个字典
,将重复的字符串作为键,索引作为值,只需添加
var elements = str
.Select((Elem, Idx) => new {Elem, Idx})
.GroupBy(x => x.Elem)
.Where(x => x.Count() > 1);
在
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));
}
.ToDictionary(x => x.Key, x => x.Select(e => e.Idx).ToList() );
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));
}
var distinct = new HashSet<string>(
str.GroupBy(s => s)
.Where(g => g.Count() > 1)
.Select(g => g.Key)
);
var index =
str.Select((s, i) => new {
Str = s,
Index = i
})
.Where(s => distinct.Contains(s.Str))
.GroupBy(i => i.Str).Select(g => new {
Str = g.Key,
Index = g.Select(s => s.Index).ToArray()
});
foreach (var i in index) {
Console.WriteLine("{0} : {1}", i.Str, String.Join(", ", i.Index.Select(n => n.ToString())));
}
Alpha : 0, 2, 3
Beta : 1, 5