鉴于我必须迭代列表并从中生成基于列表中的对象的多个列表的情况,我无法弄清楚如何在不避免使用命令式方法的情况下执行此操作。更具体地说,我有一个项目列表[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)
}
}
答案 0 :(得分:0)
试试这个:
val (nucs, prots, neuts) =
list.map(atom => (atom.nuc*3, atom.prot*4, atom.neut*5)).unzip3