時許,並且也有點憋屈問題,排序列表中項目的中間組成陣列
我需要梳理在C#中的列表 列表結構
public List < double[] > DataList = new List < double[] >();
我想在列表進行排序雙數組的最後一個指數的基礎這份名單
像
2|3|5|6|8
2|3|5|6|9
2|3|5|6|5
2|3|5|6|12
輸出應該是這樣的
2|3|5|6|12
2|3|5|6|9
一些事情
2|3|5|6|5
時許,並且也有點憋屈問題,排序列表中項目的中間組成陣列
我需要梳理在C#中的列表 列表結構
public List < double[] > DataList = new List < double[] >();
我想在列表進行排序雙數組的最後一個指數的基礎這份名單
像
2|3|5|6|8
2|3|5|6|9
2|3|5|6|5
2|3|5|6|12
輸出應該是這樣的
2|3|5|6|12
2|3|5|6|9
一些事情
2|3|5|6|5
使用LINQ:
// reproduce data
List<double[]> DataList = new List<double[]>();
DataList.Add(new double[] { 2, 3, 5, 6, 8 });
DataList.Add(new double[] { 2, 3, 5, 6, 9 });
DataList.Add(new double[] { 2, 3, 5, 6, 5 });
DataList.Add(new double[] { 2, 3, 5, 6, 12 });
var ordered = DataList.OrderByDescending(l => l.Last());
l
將對應於每個元素DataList
。用l.Last()
您使用最後一個元素作爲排序標準。
而且使用LINQ:
var tList = new List<double[]>();
tList.Add(new double[] {2,3,4,5,8});
tList.Add(new double[] {2,3,4,5,9});
tList.Add(new double[] {2,3,4,5,5});
tList.Add(new double[] {2,3,4,5,12});
var t = from element in tList
orderby element.Last() descending
select element;
var tResults = t.ToList();
這是一些老同學,而無需使用LINQ排序。
List<double[]> DataList = new List<double[]>();
private void button1_Click(object sender, EventArgs e)
{
DataList.Add(new double[] { 2, 3, 5, 6, 8 });
DataList.Add(new double[] { 2, 3, 5, 6, 9 });
DataList.Add(new double[] { 2, 3, 5, 6, 5 });
DataList.Add(new double[] { 2, 3, 5, 6, 12 });
DataList.Sort(new DoubleArrayComparer());
DataList.Reverse();
}
class DoubleArrayComparer : IComparer<double[]>
{
public int Compare(double[] x, double[] y)
{
if(x.Length>0 && y.Length>0)
{
if(x[x.Length-1] > y[y.Length-1])
return 1;
else if(x[x.Length-1] < y[y.Length-1])
return -1;
else
return 0;
}
else if(x.Length == 0 && y.Length!=0)
return -1;
else if(y.Length == 0 && x.Length!=0)
return 1;
else
return 0;
}
}
難道你不能只交換-1和+ 1來避免'Reverse'? –
是的,在這種特殊情況下它會更合適,但通常我喜歡使排序順序升序,這對我來說很自然,因爲這是本機排序的工作方式。這是唯一的原因。 –