-3

y我有一个从 list中删除一个列表的功能x。前提条件是出现列表yx- 任何出现在 中的字符都y必须出现在 中的子集x,并且其出现在 中的频率y必须 <= 在 中出现的频率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
4

2 回答 2

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)
}
于 2012-11-06T23:23:57.623 回答
0

如果您的意思是要删除其左侧与 y 的任何元素的左侧相等的元素,则以下代码会执行此操作。

def subtract(x: Occurrences, y: Occurrences): Occurrences = 
  x filterNot (y.map(_._1) contains _._1)
于 2012-11-06T07:18:59.703 回答