добавить 3 ко всем целым числам в списке без цикла c # - PullRequest
0 голосов
/ 02 января 2012

Я хочу добавить 3 ко всем list<int> элементам без использования цикла for или цикла foreach? Можно ли сделать это в одну строку? Как?

Ответы [ 3 ]

14 голосов
/ 02 января 2012

Что-то , где-то будет цикл. Вам не нужно зацикливаться на вашем коде, но что-то понадобится.

Я не могу придумать ничего лишнего, что изменит все элементы в списке, но с помощью LINQ вы можете легко создать new List<int>:

var plusThree = originalList.Select(x => x + 3).ToList();

или pre-LINQ (и немного более эффективный, но также более специфичный List<T>):

var plusThree = originalList.ConvertAll(x => x + 3);

Но оба эти будут зацикливаться за кулисами.

Вы могли бы потенциально создать проекционную реализацию IList<T>, в которой лениво применили проекцию (или, возможно, биекцию, если вы хотите быть по-настоящему причудливой) ... но это будет значительный объем работы.

4 голосов
/ 02 января 2012

Вы должны изменить значение в самом списке, поэтому нет другого способа, кроме как сделать это в цикле for, если только вы не можете создать новый список, тогда вы можете использовать Linq (который зациклится на собственный код).

for(int i = 0; i < list.Count; i++) list[i]+=3;

0 голосов
/ 02 января 2012

Другой способ сделать это (конечно, это похоже на написание цикла foreach без фактического написания)

 static void Main(string[] args)
    {

        List<int> list = new List<int>();

        list.Add(1);
        list.Add(2);
        list.Add(3);
        list.Add(4);
        list.Add(5);



        int k = 0;
        list.ForEach(delegate(int i) {  list[k++] = i+3; });



        foreach (var item in list)
        {
            Console.WriteLine(item.ToString());
        }

        Console.ReadKey();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...