【问题标题】:Group the indexes of the same elements in a array in C#在C#中对数组中相同元素的索引进行分组
【发布时间】:2018-02-19 09:25:21
【问题描述】:

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

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

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

我想看看输出是List<List<int>> { {0,3}, {1}, {2,4} } // don't mind syntax

如果能用Linq(或者更高效的方式)就更好了,谢谢帮助。

【问题讨论】:

标签: c# arrays linq


【解决方案1】:

您可以简单地使用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

【讨论】:

    【解决方案2】:

    方法之一:

    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();
    

    【讨论】:

      【解决方案3】:

      您可以将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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-31
        • 2020-08-07
        • 2022-01-05
        • 2020-07-03
        • 2018-07-18
        相关资源
        最近更新 更多