用并行集合就地变换数组

| 当具有一组对象时,通常希望(例如出于性能原因)更新(替换)适当的一些对象。例如,如果您有一个整数数组,则可能要用正整数替换负整数:
// 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)
使用并行集合库执行此类修改的规范方法是什么?     
已邀请:
就并行数组而言,这是一个疏忽。下一个版本中可能包含并行数组的并行“ 1”。 但是,您可以使用并行范围来执行此操作:
for (i <- (0 until a.length).par) a(i) = computeSomething(i)
请注意,并非所有可变集合都可以通过这种方式修改。通常,如果您想在适当位置进行修改,则必须确保它已正确同步。在这种情况下,这对于数组来说不是问题,因为不同的索引将修改不同的数组元素(并且更改在最后对调用者是可见的,因为并行操作的完成保证了所有写操作对调用者都是可见的)。     
顺序可变集合具有像ѭ1这样的方法,它们可以就地工作。 并行可变集合缺少这些方法,但是我不确定其背后是有原因还是仅仅是一个疏忽。 我的回答是您目前不走运,但是您当然可以自己写。 在进行了更多讨论之后,提交机票也许有意义吗?     
如何创建一个并行集合,将索引保存到数组中以进行转换,然后运行foreach来更改给定索引的数组中的一个单元格。 这样,您还拥有更多的控制权,并且可以让四个工人在一个阵列的四分之四上工作。因为仅翻转单个整数符号可能不足以证明并行计算的合理性。     

要回复问题请先登录注册