在C#

时间:2018-02-19 09:25:21

标签: c# arrays linq

有一个int[]数组存储不同的数字。

我想要的是将数组中相同数字的索引分组到相同的组。

例如,数组为int[5]{1,2,5,1,5}

我希望看到输出为List<List<int>> { {0,3}, {1}, {2,4} } // don't mind syntax

如果可以使用Linq(或更有效的方法),那就更好了,谢谢你的帮助。

3 个答案:

答案 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.RangeGroupBy结合使用:

int[] arr = { 1, 2, 5, 1, 5 };

var result = Enumerable.Range(0, arr.Length)
            .GroupBy(i => arr[i])
            .Select(x => x.ToList()).ToList();

DEMO HERE