C # Передача значения элемента списка для обновления локальной переменной - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть несколько локальных переменных, и я хочу разделить их все на одно и то же число.

decimal a = 0;
decimal b = 0;
decimal c = 0; 
...
decimal n = 0;
decimal divisor = 0;

<perform calculations to give all variables meaningful values>

divide each decimal (a - n) by divisor then assign value

Помимо деления и присвоения каждой переменной с помощью:

a = a / divisor;
b = b / divisor;
and so on...

Есть ли более быстрый способ? Я думаю, что-то вроде того, чтобы поместить их в коллекцию и перебирать ...

Мне не нужны значения в списке, мне нужно, чтобы переменные содержали их. Я думал о чем-то похожем, используя список указателей, перебирая его и устанавливая значения таким образом.

Ответы [ 4 ]

3 голосов
/ 12 ноября 2009

Абсолютно - используйте массив (decimal[]) или List<decimal>, затем:

for (int i = 0; i < list.Count; i++)
{
    list[i] /= divisor;
}

В качестве альтернативы, вы можете пойти на более функциональный подход, который LINQ делает особенно простым:

IEnumerable<decimal> divided = list.Select(x => x / divisor);

Вы можете создать новый массив или список из этого IEnumerable<decimal>, используя методы ToArray или ToList соответственно. Например, вы могли бы написать:

list = list.Select(x => x / divisor).ToList();

Имейте в виду, что это не то же самое, что первый код: переменная list ссылается на новый список, содержащий разделенные числа; если что-то еще имеет ссылку на исходный список, оно не увидит никаких изменений.

1 голос
/ 23 ноября 2009

"Имейте в виду, что это не то же самое, что первый код - это делает переменную списка ссылкой на новый список, содержащий разделенные числа; если что-то еще имеет ссылку на исходный список, он не увидит любые изменения." - J Скит

По вопросу - «Мне не нужны значения в списке, мне нужны переменные для их хранения. Я думал о чем-то вроде строки, используя список указателей, перебирая его и устанавливая значения таким образом . "

Это невозможно и, как указал г-н Копси, - «Вам лучше работать со списком значений, как предложил Джон. Попытка составить список указателей на исходные значения, итерации по ним и т. д. будут более трудоемкими, чем просто их непосредственная установка (плюс гораздо менее удобные в обслуживании). "

1 голос
/ 12 ноября 2009

Если у вас есть их в коллекции, вы можете сделать что-то вроде этого:

var myCollection = // setup the collection;

var newCollection = from i in myCollection
                    select i / divisor;

Это даст вам новую коллекцию со всеми исходными элементами, разделенными на вашу переменную "делитель".

0 голосов
/ 12 ноября 2009
var result = new List<decimal>(14) {a, b, c, d, e, f, g, h, i, j, k, l, m, n}
                   .ForEach(x => x /= divisor};

Конечно, это на самом деле не отрегулирует переменные a, b, c ... n.

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