0

私がそのような文字列の2D配列を持っている場合;

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

LINQを使用してデータと順序を選択するにはどうすればよいですか?たとえば、2番目の「列」と言いますか?(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

データの一時的な保存だけであっても、目的の最終結果が文字列データの並べ替えである場合(つまり、タスクがテキストファイルの並べ替えである場合)を除いて、匿名型を使用してコードを明確にします。

string[][]あなたが持っていて、持っていないと仮定すると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 に答える