J'ai une liste, qui peut contenir des éléments qui se compareront comme égaux. Je voudrais une liste similaire, mais avec un élément supprimé. Donc à partir de (A, B, C, B, D), je voudrais pouvoir "supprimer" un seul B pour obtenir par exemple (A, C, B, D). L'ordre des éléments dans le résultat n'a pas d'importance.
J'ai du code de travail, écrit d'une manière inspirée de Lisp dans Scala. Y a-t-il une manière plus idiomatique de faire cela?
Le contexte est un jeu de cartes où deux jeux de cartes standard sont en jeu, il peut donc y avoir des cartes en double mais toujours jouées une à la fois.
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)
}