![]() |
1
147
如果您可以使用C 3.5和LINQ,请尝试
|
![]() |
2
62
是的,有。使用.NET 3.5:
如果不使用.NET 3.5,可以执行以下操作:
|
![]() |
3
19
使用LINQ:
|
![]() |
4
5
这取决于你如何更好地定义。如果希望代码看起来更干净,可以使用.sum(),如其他答案中所述。如果您希望操作快速运行,并且您有一个大数组,则可以通过将其拆分为子和,然后对结果求和,使其并行。 |
![]() |
5
2
如果不喜欢LINQ,最好使用foreach循环来避免索引溢出。
|
![]() |
6
1
上述for循环解决方案的一个问题是,对于具有所有正值的以下输入数组,求和结果为负数:
总和是-2147483648,因为正结果对于int数据类型太大,溢出为负值。 对于相同的输入数组,arr.sum()建议会导致引发溢出异常。 更健壮的解决方案是使用更大的数据类型,如“long”或“double”,如下所示:
对于实现数据并行(simd/sse)和多核的更快版本,可以使用hpcharp nuget包( https://www.nuget.org/packages/HPCsharp/ ,这是开源和免费的。这些实现比linq arr.sum()和arr.asparell.sum()快很多倍,并且不会引发溢出异常,也不会溢出到负数中。 hpcharp还使用kahan和neumair浮点求和算法为浮点和双数组实现了更精确的arr.sum()。 |
![]() |
7
0
使用foreach的代码要短一些,但在JIT优化识别for循环控制表达式中的长度比较之后,在运行时可能会执行完全相同的步骤。 |
![]() |
8
0
在我的一个应用程序中,我使用了:
|
![]() |
9
0
另一种选择是使用
|
![]() |
10
-5
尝试此代码:
结果是:
|
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |