虽然是可行的,这是一个什么样LINQ是不的一个很好的例子。自行检查。
具有
var myList = new List<int> { 100, 200, 300, 400, 200, 500, };
int maxSum = 600;
“纯” LINQ(的Aggregate功率)
var result = myList.Aggregate(
new { Sum = 0, List = new List<List<int>>() },
(data, value) =>
{
int sum = data.Sum + value;
if (data.List.Count > 0 && sum <= maxSum)
data.List[data.List.Count - 1].Add(value);
else
data.List.Add(new List<int> { (sum = value) });
return new { Sum = sum, List = data.List };
},
data => data.List)
.ToList();
正常(非LINQ)执行上述
var result = new List<List<int>>();
int sum = 0;
foreach (var value in myList)
{
if (result.Count > 0 && (sum += value) <= maxSum)
result[result.Count - 1].Add(value);
else
result.Add(new List<int> { (sum = value) });
}
出于完整性的(和一些有趣的),一“的hackish” LINQ(关闭和C#运营商的功率)
int sum = 0, key = -1;
var result = myList.GroupBy(x => key >= 0 && (sum += x) <= maxSum ? key : ++key + (sum = x) * 0, (k, e) => e.ToList()).ToList();
你尝试过什么和为什么它必须在LINQ甚至一个LINQ声明? –
你有什么尝试?该代码做了什么?这与你希望做的有什么不同?随着这些问题的答案,请提供[好了,_minimal_,_complete_代码示例](http://stackoverflow.com/help/mcve)支持这些问题的答案。堆栈溢出不是代码写入服务。 –
这是不可能的单LINQ声明,但一行LINQ。或者你必须为此实施你自己的延期会面。 –