基于第一索引值对2维列表进行排序

时间:2014-10-04 21:13:06

标签: c# arrays list sorting

我已将以下值添加到我的2D列表(列表列表)中。它包含水果的重量,然后是它们的名字。你能否告诉我如何根据重量的第一个指数值对这个二维阵列进行排序?

List<List<String>> matrix = new List<List<String>>();
matrix.Add(new List<String>()); //Adds new sub List
matrix[0].Add("3.256"); 
matrix[0].Add("Apple");       

matrix.Add(new List<String>());
matrix[1].Add("1.236"); 
matrix[1].Add("Orange");           

matrix.Add(new List<String>());
matrix[2].Add("1.238"); 
matrix[2].Add("Banana");

matrix.Add(new List<String>());
matrix[2].Add("2.658"); //updated This should be matrix[3] instead of 2
matrix[2].Add("Apple");
....
...
..

Console.WriteLine(matrix[0][0]);//This prints out the value 3.256. after sorting it should print out 1.236

我是C#的新手,如果可能的话,请给我一个例子

2 个答案:

答案 0 :(得分:5)

简单回答:

matrix.OrderBy( l => l[0]);

好的,这是一个真的糟糕的设计,首先是因为字符串比较而不是会给你一个double比较相同的顺序。很容易修复:

matrix.OrderBy( l => double.Parse(l[0]));

现在除非你输入错误的数字(并且不能解析成双精度数),否则会抛出异常。你真正想要做的是创造一个&#34; Fruit&#34;对象:

class Fruit
{
    public string Name { get; set; }
    public double Weight { get; set; }
}

并持有List<Fruit>。现在你可以写:

matrix.OrderBy(f => f.Weight);

没有异常问题,因为如果你写错了会得到编译时错误。

OrderBy返回一个IEnumerable,因此请确保在打印时使用返回值而不是matrix

答案 1 :(得分:0)

首先,您需要重新设计程序并创建一个包含相关数据的类。这将对应于&#34; row&#34;在您当前的2D列表中。现在,您可以从此类创建对象列表,并定义自定义排序顺序。

请注意,这样做的另一个好处是,您可以将数据数据视为此类,而不是将所有数据视为字符串。