有一个int[]
数组存储不同的数字。
我想要的是将数组中相同数字的索引分组到相同的组。
例如,数组为int[5]{1,2,5,1,5}
我希望看到输出为List<List<int>> { {0,3}, {1}, {2,4} } // don't mind syntax
如果可以使用Linq(或更有效的方法),那就更好了,谢谢你的帮助。
答案 0 :(得分:2)
您只需使用GroupBy
以及从Select
重载获得的位置:
int[] array;
var result = array.Select((v, idx) => new { Value = v, Index = idx })
.GroupBy(g => g.Value)
.Select(g => g.ToArray()) // inner array
.ToArray(); // outer array
答案 1 :(得分:0)
其中一种方式:
var result = myArray.Select((elem, idx) => new { Value = elem, Idx = idx})
.GroupBy(proxy => proxy.Value);
foreach (var grouped in result)
{
Console.WriteLine("Element {0} has indexes: {1}",
grouped.Key,
string.Join(", ", grouped.Select(proxy => proxy.Idx).ToArray()));
}
var myFinalList = result.Select(proxy => proxy.ToArray()).ToList();
答案 2 :(得分:0)
您可以将Enumerable.Range
与GroupBy
结合使用:
int[] arr = { 1, 2, 5, 1, 5 };
var result = Enumerable.Range(0, arr.Length)
.GroupBy(i => arr[i])
.Select(x => x.ToList()).ToList();