当拥有一组对象时,通常需要(例如出于性能原因)更新(替换)某些对象。例如,如果您有一个整数数组,您可能希望将负整数替换为正整数:
// Faster for primitives
var i = 0
while (i < a.length) {
if (a(i) < 0) a(i) = -a(i)
i += 1
}
// Fine for objects, often okay for primitives
for (i <- a.indices) if (a(i) < 0) a(i) = -a(i)
使用并行集合库执行此类修改的规范方法是什么?
就并行阵列而言,这是一个疏忽。平行transform
并行数组可能会包含在下一个版本中。
但是,您可以使用并行范围来做到这一点:
for (i <- (0 until a.length).par) a(i) = computeSomething(i)
请注意,并非所有可变集合都可以通过这种方式进行修改。一般来说,如果您希望修改某些内容,则必须确保其正确同步。在这种情况下,这对于数组来说不是问题,因为不同的索引将修改不同的数组元素(并且最后调用者可以看到更改,因为并行操作的完成保证了所有写入都对调用者可见)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)