如果我理解正确,EX
则表示name="E"
and version="X"
,并且您想将事物与相同的版本配对。这是我的解决方案,不幸的是这需要平方时间,所以如果效率很重要,请不要使用它......
val versions = (S1 ++ S2) map { _.version } groupBy (identity) keys
val sortedVersions = versions.toSeq.sorted
sortedVersions map { ver => (S1 find { _.version==ver }, S2 find { _.version==ver }) }
或者如果您事先知道可能的版本是什么,只需制作一个序列并执行最后一行。
Seq("1", "2", "3", "4") map { ver => (S1 find { _.version==ver }, S2 find { _.version==ver }) }
结果:
ArrayBuffer((Some(Entry(E,1)),Some(Entry(F,1))), (None,Some(Entry(F,2))), (Some(Entry(E,3)),None), (Some(Entry(E,4)),Some(Entry(F,4))))
请注意,而不是(None, F2)
我在(None, Some(F2))
这里,因为配对似乎更一致None
。Some
顺便说一句,case class(...)
就足够了,您不需要{ }
在其后添加空括号。