我有一些局部变量,我想将它们全部除以所有相同的数字。
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...
有更快的方法吗?我正在考虑将它们全部放入一个集合并迭代它的方式......
我不需要列表中的值,我需要变量来包含它们。我正在考虑使用指针列表,迭代它并以这种方式设置值。
答案 0 :(得分:3)
绝对 - 使用数组(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
变量引用包含分割数字的 new 列表;如果其他任何内容都引用了原始列表,则不会看到任何更改。
答案 1 :(得分:1)
如果你将它们放在一个集合中,你可以这样做:
var myCollection = // setup the collection;
var newCollection = from i in myCollection
select i / divisor;
这将为您提供一个新的集合,其中所有原始元素除以您的“除数”变量。
答案 2 :(得分:1)
“请注意,这与第一个代码不同 - 它使列表变量引用包含分割数字的新列表;如果其他任何内容都有对原始列表的引用,则它将看不到任何变化。” - J Skeet
根据问题 - “我不需要列表中的值,我需要变量来包含它们。我正在考虑使用指针列表,迭代它并以这种方式设置值的行。“
这是不可能的正如Copsey先生指出的那样 - “你最好使用值列表,就像Jon建议的那样。试着制作一个指向原始值的指针列表迭代它们等等,不仅仅是直接设置它们(加上更少的可维护性)。“
答案 3 :(得分:0)
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。