Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何选择非独立元素及其索引_C#_Linq - Fatal编程技术网

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