我有以下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}
谢谢。
你可以这样做:
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;
}
}