gpt4 book ai didi

c# - 并行循环返回 float 之和

转载 作者:行者123 更新时间:2023-11-30 14:55:01 30 4
gpt4 key购买 nike

我想将这个简单的 for 循环转换为并行循环。它遍历字符串数组(从文本文件读取的 float )并计算总和。

for (int i = 0; i < parts.Length; i++)
{
float tmp;

if (float.TryParse(parts[i], out tmp) || float.TryParse(parts[i].Replace('.', ','), out tmp))
total += tmp;
}

这是我的尝试:

Parallel.For(0, parts.Length, i =>
{
float tmp;

if (float.TryParse(parts[i], out tmp) || float.TryParse(parts[i].Replace('.', ','), out tmp))
total += tmp;
});

它返回一个 float ,但值是错误的。

我也试过this one .

Parallel.For<float>(0, parts.Count, () => 0, (i, loop, subtotal) =>
{
total += result[i];
return subtotal;
},
(x) => Interlocked.Add(ref sum, x)
);

无法理解语法。

我也知道这听起来很荒谬,但大多数例子都是整数,最终他们使用了一个只接受 int 参数的 Add 方法,显然我不能使用它。

最佳答案

为了方便使用以下内容:

var total = 
parts.AsParallel().Sum(x =>
{
float tmp;
if (float.TryParse(x, out tmp) || float.TryParse(x.Replace('.', ','), out tmp))
return tmp;
return 0;
});

或者使用Parallel.For

var bag = new ConcurrentBag<float>(); //Will hold the sub total for each thread.

Parallel.For<float>(0, parts.Count, () => 0, (i, state, subtotal) =>
{
float tmp;
if (float.TryParse(parts[i], out tmp) || float.TryParse(parts[i].Replace('.', ','), out tmp))
subtotal += tmp;
return subtotal;
},
(x) => bag.Add(x));

var total = bag.Sum();

关于c# - 并行循环返回 float 之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474249/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com