0

如果我有这样的二维字符串数组;

{
    {"12", "Animal", "Cat"}
    {"20", "Animal", "Dog"}
    {"6", "Vegetable", "Carrot"}
    {"5", "Mineral", "Iron"}
}

如何使用 LINQ 来选择数据和排序,比如第二个“列”?(最好是 C# linq)

4

2 回答 2

6

就像是:

var sorted = array.OrderBy(x => x[1])
                  .ToArray(); // Or ToList, or nothing...

目前尚不清楚“选择数据”是什么意思。就个人而言,我会尝试创建一个更强类型的数据模型,而不仅仅是为每一行设置一个字符串数组。当然,您也可以使用 LINQ 轻松做到这一点:

var sorted = array.Select(row => new Item {
                             Id = int.Parse(row[0]),
                             Category = row[1],
                             Name = row[2]
                          });
                  .OrderBy(x => x.Category)
                  .ToArray();

编辑:对于第一个查询表达式版本:

var sorted = (from x in array
              orderby x[1]
              select x).ToArray();

如您所见,它比直接使用扩展方法更混乱。两种形式都值得适应,因此您可以在任何给定情况下选择最简单的一种。

于 2012-04-12T16:01:04.083 回答
0

即使它只是数据的临时存储,我也会使用匿名类型来使代码更清晰,除非所需的最终结果是排序的字符串数据(即,如果您的任务是对文本文件进行排序)。

假设您有 astring[][]而不是string[,],我会这样做:

var query = from row in array
            let record = new { ID = int.Parse(row[0]), Category = row[1], Name = row[2] }
            orderby record.Category
            select record;

var sortedData = query.ToArray();

扩展方法语法:

var sortedData = array
    .Select(row => new { ID = int.Parse(row[0]), Category = row[1], Name = row[2] })
    .OrderBy(record => record.Category)
    .ToArray();
于 2012-04-12T16:27:13.813 回答