Eu tenho uma lista, que pode conter elementos que serão comparados como iguais. Eu gostaria de uma lista semelhante, mas com um elemento removido. Portanto, de (A, B, C, B, D), gostaria de poder "remover" apenas um B para obter, por exemplo, (A, C, B, D). A ordem dos elementos no resultado não importa.
Eu tenho código de trabalho, escrito de forma inspirada em Lisp em Scala. Existe uma maneira mais idiomática de fazer isso?
O contexto é um jogo de cartas em que dois baralhos de cartas padrão estão em jogo, então pode haver cartas duplicadas, mas ainda jogadas uma de cada vez.
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)
}