在 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
我正在尝试复制第 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