将数组的元素聚合为不大于定义的值



我有一个数组,比如

var myArray = new[] { 1, 2, 3, 1, 3, 1, 3, 1, 2, 1, 2, 7};

我想得到一个新的列表,它存储这个数组元素的总和,当我将第一个元素添加到下一个元素时,它会将结果向前推进,然后添加到下个元素等等,但如果总和结果大于6,它会跳到下一元素并开始新的总和,但会将上一个总和保存到新列表中。

所以,对于上面的数组,我期望得到这样的结果6, 5, 6, 3, 7

我该怎么做?

这就是我尝试过的。这里的问题是最后一个元素总是被跳过。我还担心这是否是一个完美的方法

int[] DoAggregate(int[] array)
{
var prev = 0;
bool first = true;
var sum = 0;
List<int> result = new();
foreach (var item in array)
{
if (first)
{
first = false;
}
else
{
sum = sum + prev;
if ((sum + item) > 6)
{
result.Add(sum);
sum = 0;
prev = item;
continue;
}
}
prev = item;

}
return result.ToArray();
}

当循环后sum + prev的值大于0时,您所需要做的似乎就是将其考虑在内:

int[] DoAggregate(int[] array)
{
var prev = default(int);
bool first = true;
var sum = 0;
List<int> result = new();
foreach (var item in array)
{
if (first)
{
first = false;
}
else
{
sum = sum + prev;
if ((sum + item) > 6)
{
result.Add(sum);
sum = 0;
prev = item;
continue;
}
}
prev = item;

}
sum = sum + prev;
if (sum > 0)
{
result.Add(sum);
}
return result.ToArray();
}

最新更新