Ho un elenco, che può contenere elementi che verranno confrontati come uguali. Vorrei un elenco simile, ma con un elemento rimosso. Quindi da (A, B, C, B, D) vorrei essere in grado di "rimuovere" solo un B per ottenere ad esempio (A, C, B, D). L'ordine degli elementi nel risultato non ha importanza.
Ho del codice funzionante, scritto in modo ispirato al Lisp in Scala. C'è un modo più idiomatico per farlo?
Il contesto è un gioco di carte in cui sono in gioco due mazzi di carte standard, quindi potrebbero esserci carte duplicate ma ancora giocate una alla volta.
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)
}