我有跟随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
我不想在列中显示重复的元素。所以它就像灌浆一样。
感谢。
答案 0 :(得分:2)
您可以执行以下操作:
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]等...)
答案 1 :(得分: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;
}
}