Aar*_*ide 6 c# linq iteration for-loop
是否有更优雅的方式一次实现5个项目而不是像这样的for循环?
var q = Campaign_stats.OrderByDescending(c=>c.Leads).Select(c=>c.PID).Take(23);
var count = q.Count();
for (int i = 0; i < (count/5)+1; i++)
{
q.Skip(i*5).Take(5).Dump();
}
Run Code Online (Sandbox Code Playgroud)
因此,您希望有效地呼叫Dump()每5个项目q.
您现在拥有的解决方案将在IEnumerable<T>每次for循环时重新进行迭代.做这样的事情可能更有效率:(我不知道你的类型是什么,所以我正在使用T)
const int N = 5;
T[] ar = new T[N]; // Temporary array of N items.
int i=0;
foreach(var item in q) { // Just one iterator.
ar[i++] = item; // Store a reference to this item.
if (i == N) { // When we have N items,
ar.Dump(); // dump them,
i = 0; // and reset the array index.
}
}
// Dump the remaining items
if (i > 0) {
ar.Take(i).Dump();
}
Run Code Online (Sandbox Code Playgroud)
这只使用一个迭代器.考虑到您的变量已命名q,我假设它是"查询"的缩写,这意味着这是针对数据库的.因此,仅使用一个迭代器可能非常有用.
我可以保留此代码,并将其包装在扩展方法中."丛"怎么样?
public static IEnumerable<IEnumerable<T>> Clump<T>(this IEnumerable<T> items, int clumpSize) {
T[] ar = new T[clumpSize];
int i=0;
foreach(var item in items) {
ar[i++] = item;
if (i == clumpSize) {
yield return ar;
i = 0;
}
}
if (i > 0)
yield return ar.Take(i);
}
Run Code Online (Sandbox Code Playgroud)
在代码的上下文中调用它:
foreach (var clump in q.Clump(5)) {
clump.Dump();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |