【发布时间】:2011-08-03 22:47:45
【问题描述】:
我有一个列表,其中可能包含比较相等的元素。我想要一个类似的列表,但删除了一个元素。所以从 (A, B, C, B, D) 我希望能够“删除”一个 B 以获得例如(A、C、B、D)。结果中元素的顺序无关紧要。
我有工作代码,在 Scala 中以 Lisp 启发的方式编写。有没有更惯用的方法 这样做?
上下文是一个纸牌游戏,其中有两副标准纸牌在玩,所以可能有 是重复的牌,但仍一次打出一张。
def removeOne(c: Card, left: List[Card], right: List[Card]): List[Card] = {
if (Nil == right) {
return left
}
if (c == right.head) {
return left ::: right.tail
}
return removeOne(c, right.head :: left, right.tail)
}
def removeCard(c: Card, cards: List[Card]): List[Card] = {
return removeOne(c, Nil, cards)
}
【问题讨论】:
-
添加了一个注释,在这种特定情况下,结果列表的顺序无关紧要。
-
所以这个问题中的
List[Card]是玩家的手? -
@Ken Bloom,是的,这是玩家的手牌。
-
你知道,我搜索了一段时间这样的问题,然后发布了同样的问题,然后在我浏览并等待人们回答我的时候找到了这个问题。我想我现在应该投票结束我自己的问题作为重复。 ;-)
-
这个关于 Clojure 的问题:stackoverflow.com/questions/7662447/…