Накапливать значения в C # - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь повторить простое действие по накоплению значения 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;
        }

Ответы [ 5 ]

3 голосов
/ 22 октября 2019

Я не знаю, почему вы создаете список object, когда его очень ясно int в списке. Я изменил код, чтобы он возвращал 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();

Скрипка здесь

2 голосов
/ 22 октября 2019

Попробуйте это:

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;
}
1 голос
/ 22 октября 2019
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' в списке

0 голосов
/ 22 октября 2019

Я не совсем уверен, но попробуйте использовать sums.Add (значение * i);вместо ваших сумм. Добавить (значение);

Совет: в цикле for используйте i ++ вместо i = i + 1. Это более распространенный способ, а также более быстрый ввод.

0 голосов
/ 22 октября 2019

Вы не меняете значение value, поэтому оно всегда будет оригинальным. Add добавляет элемент в конец списка.

...