这是我使用的代码的简化版本.我需要使用LINQ重写它.
class Program
{
// Here is the ugly stuff
static void DoStuff(int[] uidArray)
{
int chunkCount = (int)Math.Ceiling(uidArray.Length / 10d);
for (int i = 0; i < chunkCount; i++)
{
// calculating the remaining uids.
// this is super ugly imho, but I couldnt come up with anything better...
int remaining = (i == chunkCount - 1) ? uidArray.Length - i * 10 : 10;
int[] currentChunks = uidArray.Skip(i * 10).Take(remaining).ToArray();
string[] data = GetDataForUids(currentChunks);
foreach (string item in data)
{
Console.WriteLine(item);
}
}
}
// Call DoStuff()
static void Main(string[] args)
{
DoStuff(Enumerable.Range(1, 21).ToArray());
Console.ReadLine();
}
// This method does is not my concern
static string[] GetDataForUids(int[] uidArray)
{
var ret = new List<string>();
foreach (int uid in uidArray)
{
ret.Add("item " + uid);
}
return ret.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
"真实"实施的作用是什么:
int[]一些uidsGetDataForUids使用数据库的部分调用,以便通过uid获取数据foreach循环中处理返回的数据由于各种"外部"变量,chunkCount我无法想象如何使用LINQ以更好的方式编写这个东西.还有可能吗?
你去:
class Program
{
static void Main(string[] args)
{
var uids = Enumerable.Range(1, 21).ToArray();
var chunks = from index in Enumerable.Range(0, uids.Length)
group uids[index] by index / 10;
foreach (var currentChunks in chunks)
{
Console.WriteLine("KEY: {0}", currentChunks.Key);
// TODO: string[] data = GetDataForUids(currentChunks.ToArray());
foreach (var uid in currentChunks)
{
Console.WriteLine(uid);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
打印:
KEY: 0
1
2
3
4
5
6
7
8
9
10
KEY: 1
11
12
13
14
15
16
17
18
19
20
KEY: 2
21
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |