私がそのような文字列の2D配列を持っている場合;
{
{"12", "Animal", "Cat"}
{"20", "Animal", "Dog"}
{"6", "Vegetable", "Carrot"}
{"5", "Mineral", "Iron"}
}
LINQを使用してデータと順序を選択するにはどうすればよいですか?たとえば、2番目の「列」と言いますか?(C#linqが望ましい)
何かのようなもの:
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();
ご覧のとおり、拡張メソッドを直接使用するよりも雑然としています。両方の形式に慣れることは価値があるので、どのような状況でも最も単純な形式を選択できます。
データの一時的な保存だけであっても、目的の最終結果が文字列データの並べ替えである場合(つまり、タスクがテキストファイルの並べ替えである場合)を除いて、匿名型を使用してコードを明確にします。
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();