对2D列表/数组进行分组/排序/拆分

本文关键字:排序 拆分 2D 列表 数组 | 更新日期: 2023-09-27 17:51:26

我有以下2D数组

var array1 = new string[][]
            {
              new string[] {A,B,C},
              new string[] {A,X,Y},
              new string[] {D,L,K},
              new string[] {A,X,W}
            };

最后,我想对这个列表和输出进行排序或分组,我想在我的MVC视图上显示如下表

A/X/Y,W

/B/C

D/l/K

我不想在列中显示重复的元素。它的意思是像分组。

  • 如何使用linq对控制器中的结果进行分组。
  • 排序可能也有帮助,如果我可以排序第一个元素,然后第二个等。
  • 另一个想法也有效,如果我可以分成3个1D数组?那么最后我将得到array1 ={A,A,D,A} array2={B,X,L,X} array3= {C,Y,K,W}

谢谢。

对2D列表/数组进行分组/排序/拆分

你可以这样做:

var array1 = new string[][]
{
    new string[] {"A","B","C"},
    new string[] {"A","X","Y"},
    new string[] {"D","L","K"},
    new string[] {"A","X","W"},
};
var s = array1.Select(a => string.Concat(a)).ToList();          
s.Sort();
// Now you have them sorted as a list of strings, do what you want...

这将不限制您只能输入3个条目(不喜欢硬编码的[0],[1]等)

你的问题应该分成两个子问题。首先,您需要对array1进行排序;其次,您需要使用array1已排序的事实来取出array1

不能用分组来代替排序,因为分组不能保证具有相同第一个元素的子数组彼此紧跟着。

var array1 = new List<IList<string>>
{
    new List<string> {"A", "X", "Y"}, 
    new List<string> {"A", "X", "W"}, 
    new List<string> {"A", "B", "C"}, 
    new List<string> {"D", "L", "K"}, 
};
var array2 = from a in array1
    orderby a[0], a[1], a[2]  
    select a;
var array3 = array2.ToList();

现在你可以在Razor中使用array2了:

@if (array2.MoveNext())
{
   @array2.Current[0], @array2.Current[1], @array2.Current[3]<br />
   var lastElement = array2.Current;
   while (array2.MoveNext())
   {
     if (array2.Current[0] != lastElement[0])
     {
       @array2.Current[0],
     }
     else if (array2.Current[1] != lastElement[0])
     {
       @array2.Current[1],
     }
     @array2.Current[2]
     lastElement = array2.Current;
   }
}