在 C# 中累积值

Accumulate values in C#

我正在尝试复制第 n 次累积值的简单操作。所以类似值 4 的东西需要 10 次就是:[0,4,8,12,16,20,24,28,32,36]。我做错了什么?

        public static IList SumValues(int value, int times)
        {
            List<object> sums = new List<object>();
            for (int i = 0; i < times; i = i + 1)
            {
                while (i < times)
                    sums.Add(value);
            }
            return sums;
        }

您没有更改 value 的值,因此它将始终是原始值。 Add 将项目追加到列表末尾。

试试这个:

public static IList SumValues(int value, int times)
{
   List<int> sums = new List<int>();
   for (int i = 0; i < times; i++)
   {
       sums.Add(i*value);
   }
   return sums;
}
public static IList SumValues(int value, int times) // you need to define the type for the return list
{
    List<object> sums = new List<object>(); // you could probably use List<int> here instead of object, unless there's some logic outside of this function that treats them as objects
    int incrementedValue = 0;
    for (int i = 0; i < times; i++) // i++ is the same as i = i+1, but a little cleaner
    {
        sums.Add(incrementedValue);
        incrementedValue += value;
    }

    return sums;
}

这将始终在列表中包含“0”

我不太确定,但请尝试使用 sums.Add(价值*我);而不是你的 sums.Add(value);

提示:在 for 循环中使用 i++ 而不是 i = i + 1。它更常见,输入速度也更快。

我不知道你为什么要创建一个 object 的列表,而 int 显然在列表中。我已将代码更改为 return 和 IEnumerable<int>,这样您就可以在不具体化的情况下进行迭代。考虑到这一点,您可以使代码更短一些:

public static IEnumerable<int> SumValues(int initialValue, int iterations)
{
    for(int i = 0; i < iterations; i++)
    {
        yield return initialValue * i;
    }       
}

如果您在 List<T>Array 中需要它,您可以调用适当的方法(.ToList().ToArray()):

List<int> someIntList = SumValues(4, 10).ToList();
int[] someIntArray = SumValues(4, 10).ToArray();

Fiddle here