In Scala gibt es eine saubere und einfache Art und Weise zu vergleichen, einen Wert mit mehreren Werten
Sagen, ich habe eine variable x, und ich möchte prüfen, ob es gleich zu einem von mehreren Werten a, b, c, d, e (ich meine die == Gleichheit, nicht Identität).
In einer SQL-Abfrage das gleiche Konzept ist behandelt mit
WHERE x IN (a, b, c, d, e).
Gibt es etwas vergleichbares in Scala das ist so einfach, wie das? Ich weiß, es ist sonst möglich, es zu tun in einer Linie mit einem komplexen Ausdruck wie dem Bau eines HashSet und überprüfung auf die Existenz in der Menge, aber ich würde es vorziehen, verwenden Sie ein einfaches Konstrukt, wenn es verfügbar ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde lieber
contains(a)
überexists(_ == a)
:Update:
contains
definiert ist, inSeqLike
, so dass die oben genannten Werke mit einer beliebigen Sequenz.Update 2: Hier ist die definition von
contains
inSeqLike
:contains
würde nur die Arbeit mit Identität, nicht Gleichheit. Ich habe Sie nach unten und begann zu schreiben, ein Beweis mehr in meine Antwort, sondern ich bewies mich falsch. Sorry. 🙂contains(a)
ist einfach nur Zucker fürexists(_ == a)
so unsere Antworten sind gleichwertig.Könnten Sie implementieren eine
in
- operator wie folgt:A => Boolean
schreiben Sie5 ∈: Set(1, 2, 3, 4, 5)
Gegeben, dass ein
Set[A]
ist auch einA => Boolean
, können Sie einfach sagen:Es ist eigentlich ganz nett, um zu definieren, einige pimpin' Zucker für diese:
Dann können Sie den code schreiben, etwa so:
Durch die Synthese alle anderen Antworten, ich habe mit der richtige Antwort:
Ta-da.
vorhanden ist:
finden und filtern nahe kommen:
Meine erste Antwort war, wie die anderen Antworten, zu verwenden enthalten:
aber dann dachte ich, es wäre nur Arbeit für Box-Werte wie 4, nicht für Klassen, zwischen Identität und Gleichheit. Um das zu beweisen, schrieb ich eine kleine Klasse, die sich mir falsch: 🙂
Ich sehe, habe ich gleich/eq/== öfter, um die Unterscheidungen in mein Gehirn.
ist imho die Antwort, die die meisten einfach.
Set(a, b, c, d, e)(x)
so gut funktioniert. Ich lasse die Gründe für es als eine übung für den Leser. 🙂