0

考虑到我必须迭代一个列表并从中根据列表中的对象生成多个列表的场景,如果不避免使用命令式方法,我无法弄清楚如何做到这一点。更具体地说,我有一个项目列表 [a, b, c, d] 并且想根据项目的不同属性生成三个新列表:[a1, b1, c1, d1], [a2, b2,c2,d2],[a3,b3,c3,d3]。

我在下面制作了一个简单的示例,这可能是我在 java 中的做法,但我想知道是否有人可以推荐一种方法来做到这一点,同时避免使用命令式风格?

case class Atom(nuc: Int, prot: Int, neut: Int)

class Splitter(list: Array[Atom]) {

    val nucs: ArrayBuffer[(Int, Int)] = ArrayBuffer()
    val prots: ArrayBuffer[(Int, Int)] = ArrayBuffer()
    val neuts: ArrayBuffer[(Int, Int)] = ArrayBuffer()

    list foreach { atom =>
        nucs += (atom.nuc -> atom.nuc * 3)
        prots += (atom.prot -> atom.prot * 4)
        neuts += (atom.neut -> atom.neut * 5)
    }
}
4

1 回答 1

0

尝试这个:

val (nucs, prots, neuts) =
  list.map(atom => (atom.nuc*3, atom.prot*4, atom.neut*5)).unzip3
于 2013-10-18T11:58:37.517 回答