我有一个从列表y
中删除一个列表x
的函数。前提条件是事件列表y
是x
的子集 - y
中出现的任何字符都必须出现在x
中,其频率必须在y
中be< = x
中的频率。
结果值是一个事件 - 意味着它已排序且没有零条目。
这是我的原始代码。这是针对Scala progfun的任务,现在我只是对正确的答案感到好奇。
type Occurrences = List[(Char, Int)]
def subtract(x: Occurrences, y: Occurrences): Occurrences = x filterNot (y contains)
必须通过以下单元测试。
测试1
test("subtract: lard - r") {
val lard = List(('a', 1), ('d', 1), ('l', 1), ('r', 1))
val r = List(('r', 1))
val lad = List(('a', 1), ('d', 1), ('l', 1))
assert(subtract(lard, r) === lad)
}
测试2
// subtract: jimmy - my
List((i,1), (j,1), (m,1), (y,0)) did not equal List((i,1), (j,1), (m,1))
测试3
//subtract: ok - ok
List((k,0), (o,0)) did not equal List()
测试4
//subtract: abba - abba
List((a,0), (b,0)) did not equal List()
测试5
//subtract: assessment - assess
答案 0 :(得分:0)
如果你想要剥离左边的元素与y的任何元素的左边相等,下面的代码就是这样。
def subtract(x: Occurrences, y: Occurrences): Occurrences =
x filterNot (y.map(_._1) contains _._1)
答案 1 :(得分:0)
如果我正确理解了作业,则需要减去计数。我的尝试将是这样的:
def subtract(x: Occurrences, y: Occurrences): Occurrences = {
val my = y.toMap
x.map(occ => (occ._1, occ._2 - (my.get(occ._1) getOrElse 0) ))
.filter(_._2 > 0)
}