C#增量数组
如果我想生成一个从1到6并以.01递增的数组,那么最有效的方法是什么?
我想要的是一个数组,mins和maxs可能会在以后更改……像这样: x[1,1.01,1.02,1.03...]
假设有一个start
, end
和一个increment
值,你可以进一步抽象:
Enumerable .Repeat(start, (int)((end - start) / increment) + 1) .Select((tr, ti) => tr + (increment * ti)) .ToList()
让我们分解一下:
Enumerable.Repeat
接受一个起始编号,对给定数量的元素重复,并返回一个可枚举的(一个集合)。 在这种情况下,我们从start
元素start
,找到start
和end
之间的差异并将其除以increment
(这给出了start
和end
之间的增量数),并添加一个以包含原始数字。 这应该给我们使用的元素数量。 请注意,由于increment
是十进制/双精度,因此在转换为int时可能会出现舍入错误。
给定特定选择器函数, Select
转换可枚举的所有元素。 在这种情况下,我们将获取生成的数字和索引,并将原始数字与索引相乘,再加上增量。
最后,对ToList
的调用将把集合保存到内存中。
如果您发现自己经常使用它,那么您可以创建一个方法来为您执行此操作:
public static List RangeIncrement(decimal start, decimal end, decimal increment) { return Enumerable .Repeat(start, (int)((end - start) / increment) + 1) .Select((tr, ti) => tr + (increment * ti)) .ToList() }
编辑:更改为使用重复,以便仍然保持非整数值。 此外,这里没有错误检查,所以你应该确保检查increment
不是0并且start
< end * sign(increment
)。 将结尾乘以增量符号的原因是,如果您以负数递增,则结束应该在开始之前。
最简单的方法是使用Enumerable.Range
:
double[] result = Enumerable.Range(100, 500) .Select(i => (double)i/100) .ToArray();
(因此在可读性和代码行方面效率很高)
我只想做一个简单的function。
public IEnumerable GetValues(decimal start, decimal end, decimal increment) { for (decimal i = start; i <= end; i += increment) yield return i; }
然后你可以把它变成一个数组,查询它,或者做任何你想做的事情。
decimal[] result1 = GetValues(1.0m, 6.0m, .01m).ToArray(); List result2 = GetValues(1.0m, 6.0m, .01m).ToList(); List result3 = GetValues(1.0m, 6.0m, .01m).Where(d => d > 3 && d < 4).ToList();
使用0.01增量的for循环:
List myList = new List (); for (decimal i = 1; i <= 6; i+=0.01) { myList.Add(i); }
优雅
double[] v = Enumerable.Range(1, 600).Select(x => x * 0.01).ToArray();
高效
Use for loop
无论你做什么,不要使用浮点数据类型(如double
),它们不能代表舍入行为用于这样的事情。 转到decimal
或带有因子的整数。 对于后者:
Decimal[] decs = new Decimal[500]; for (int i = 0; i < 500; i++){ decs[i] = (new Decimal(i) / 100)+1 ; }
你可以像这样解决它。 solution方法返回一个double数组
double[] Solution(double min, int length, double increment) { double[] arr = new double[length]; double value = min; arr[0] = value; for (int i = 1; i
var ia = new float[500]; //guesstimate var x = 0; for(float i =1; i <6.01; i+= 0.01){ ia[x] = i; x++; }
你可以通过multithreading来提高速度,但除非你计划在非常慢的处理器上运行它,否则它可能不值得花费。
上述就是C#学习教程:C#增量数组分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1027168.html