0

我有一个清单

["AZ", "BZ", "C", "AY", "BY"]

只有当它们都出现时,我才想用“Z”替换“AZ”和“BZ”。只有当它们都出现时,我才想用“Y”替换“AY”和“BY”。

所以,

["AZ", "BZ", "C", "AY", "BY"]变成["Z", "C", "Y"]

["AZ", "C", "AY", "BY"]变成["AZ", "C", "Y"]

["BZ", "C", "AY"]变成["BZ", "C", "AY"]

有什么好的功能方法可以做到这一点。我只能想到首先检查 Z 和 Y 的两个术语是否存在,然后映射它们是否存在,然后做一个唯一的。

4

2 回答 2

4
val v = Vector("AZ", "BZ", "C", "AY", "BY")
val s = Set("A", "B")
val output = 
  v.groupBy(_.drop(1))
    .flatMap { case (last, group) => 
      val groupSet = group.map(_.take(1)).toSet
      if(s.forall(groupSet)) Vector(last) else group
  }
println(output)
// List(Y, Z, C)
于 2013-10-09T15:48:48.020 回答
0

你会考虑这个功能吗?

val s = Set("AZ", "BZ", "C", "AY", "BY")
val sz = Set("AZ", "BZ")
val sy = Set("AY", "BY")
val output = (s--sz--sy) ++
             (if ((s&sz)==sz) sz.map(_.drop(1)) else (s&sz)) ++
             (if ((s&sy)==sy) sy.map(_.drop(1)) else (s&sy))
于 2013-10-10T01:29:02.250 回答