| 著作一覧 |
Rubyにはeach_with_indexというメソッドがあって、これを使うとオブジェクトの列挙とインデックスが同時に取れる。
[:a, :b, :c].each_with_index do |v, i|
p "#{i}:#{v}" #=> "0:a", "1:b", "2:c"
end
C#で同じことができるとforはほとんど不要になる。
var a = new char[]{ 'a', 'b', 'c' };
/* 本当は次のように書きたいが、インデックスが欲しいので
foreach (var x in a)
{
Console.WriteLine(x);
}
for を使うことになる? */
for (var i = 0; i < a.Length; i++)
{
Console.WriteLine(i + ":" + x);
}
LINQを使うとインデックスを得られる。
foreach (var x in a.Select((v, i)=>new {Index = i, Value = v}))
{
Console.WriteLine(x.Index + ":" + x.Value);
}
これは良い。forは無限ループのfor (;;) だけでしか使わなくて済む。
で、ここで良くわからないのは、同じことを、from構文ではどう書けば良いのかわからない。
(from x in a select ???? new { Index = i, Value = v }) // どう書くんだ?
QA@ITに投げれば良いのか、と書いてから気づいたりして。
ジェズイットを見習え |