zer*_*0ne 3 c# delegates inline
这是我正在处理的简化场景.循环结构有多种方法.
for (int i=0; i<I; i++) {
// Do something
for (int j=0; j<J; j++) {
// Do something
for (int k=0; k<K; k++) {
// Do something
Update(a,b,c);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在一种方法中,Update(a,b,c)是
a[i] += b[j] * c[k]
Run Code Online (Sandbox Code Playgroud)
在另一种方法中,它是
b[j] += a[i] * c[k]
Run Code Online (Sandbox Code Playgroud)
然而在另一种方法中,它是
c[k] += a[i] * b[j]
Run Code Online (Sandbox Code Playgroud)
目前,我的代码到处都是重复的.C#中是否有一个模式,以便我不重复代码?我很想使用委托,但似乎委托会降低性能(这在我的情况下是至关重要的).
有没有办法为这种情况编写宏或内联委托函数?
Eri*_*ert 11
像这样的东西?
void DoUpdates(Action<int, int, int> update)
{
for (int i=0; i<I; i++) {
// Do something
for (int j=0; j<J; j++) {
// Do something
for (int k=0; k<K; k++) {
// Do something
update(i, j, k);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在来电者
DoUpdates((int i, int j, int k) => { a[i] += b[j] * c[k]; });
Run Code Online (Sandbox Code Playgroud)
这就是你要找的东西吗?
void Update<T>(T[] x, T[] y, T[] z, int i, int j, int k)
{
x[i] += y[j] * z[k];
}
Run Code Online (Sandbox Code Playgroud)
用法:
Update(a, b, c, i, j, k);
Update(b, a, c, j, i, k);
Update(c, a, b, k, i, j);
Run Code Online (Sandbox Code Playgroud)
我发现它a总是由i(等等 - bby j、cby k)访问。您可以尝试利用这一事实来优化代码。
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |