著作一覧 |
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に投げれば良いのか、と書いてから気づいたりして。
ジェズイットを見習え |