defineマクロ が存在しないので、単純にはREPを書くことが出来ません。
擬似的に再現できるそうです。メモメモ
まずは以下のように定義します。
static void REP(int n, Action action) {
for (int i = 0; i < n; i++) action(i) ;
}
そして使うときには
var a = new int[]{11,22,33,44,55,66,};
int sum = 0;
for(int i = 0 ; i < a.Length; i ++) sum += i * a[i]; というfor文は、 var a = new int[]{11,22,33,44,55,66,}; int sum = 0; REP(a.Length, i => sum += i * a[i]);
というふうに書き直せますし
int w = 100, h = 10;
var a = new int[w,h];
for(int x = 0; x < w ; x ++)
for(int y = 0; y < h ; y ++) a[x,y] = x * y; という二重ループは、 int w = 100, h = 10; var a = new int[w,h]; REP(w, x => REP(h, y => a[x,y] = x * y));
という風に書くことが出来ます。
実行時間の差も計測してみましたが、変化なかったのでREPを使いたい方は是非C#でも…
chocolamint
348 contribution
2015/11/14 01:46
Thank
そういうことではないのかもしれませんが、foreach を使うという手もあります:-)
var a = new int[]{11,22,33,44,55,66,};
int sum = 0;
foreach(var n in a) sum += i * n;
さらに、出来るだけ LINQ to Object で置き換える 消える前にメモ
var sum = a.Select((i, n) => i * n).Sum();
Enumerable.Range を使えば
for(int i=0;i<n;i++)
は
foreach(var i in Enumerable.Range(0, n))
と書けることもあって、for 文って半年に 1 度も使わない 消える前にメモ