お疲れ様です。たなしょです。
今日はLINQを勉強したのですが、データの整形や加工をするための手段なので
ほとんど書くことがありません。
イテレーターブロック
yield
を付けることで列挙子が簡単に生成できる仕組みです。
列挙子は0から始まり1ずつ増加していく型というイメージを持っています。
あと列挙型は全要素分のメモリ領域を確保する必要がないこと特徴に上げられます。
LINQ
C#の目玉機能ということで勉強するのを楽しみしてたのですが、蓋を開けたらデータ処理の方法だったので少しがっかりしました。
SQLの句のようなメソッド呼び出しデータを整形していきます。
正直一回で覚えられないのと現場で使ってみないとその効力が伝わりづらいのかなと思いました。
活用ケースとしては、DBからデータを取り出してそのデータを整形してviewに渡して画面に表示するなどが考えられます。
あとはデータセットを整形してCSVに出力したりですかね(Pythonのほうが便利なんじゃないかな...)
今回のカノジョを作るというテーマでC#を使ってるわけですが、たぶんLINQは使わないんじゃないかなと思いました。
LINQにはクエリ形式とメソッド形式と書き方が2種類あるそうです。
var dataA = new[]
{
new { Name = "A", Id = 1},
new { Name = "B", Id = 2},
new { Name = "C", Id = 3},
};
var dataB = new[]
{
new { Id = 1, value= 10},
new { Id = 1, value= 20},
new { Id = 2, value= 30},
new { Id = 2, value= 40},
new { Id = 2, value= 50},
new { Id = 3, value= 60},
};
// query
var i = from a in dataA
join b in dataB on a.Id equals b.Id
select new { a.Name, b.value };
// method
var i2 = dataA.Join(dataB,
a => a.Id,
b => b.Id,
(a, b) => new
{
a.Name,
b.value
});
最後に
データ整形ならPythonのほうがわかりやすいかなと思いました。
LINQのソースコードを読むのは慣れが必要だと感じました(どの言語でもそうですが)。