6 Stimmen

Wie kann ich das Maximum einer beliebigen Eigenschaft aus einer Liste in Scala erhalten?

Nehmen wir an, ich habe eine Klasse, die etwa so aussieht:

class Foo(Prop1:Int, Prop2:Int, Prop3:Int)
{
 ..
}

Und ich wollte eine Funktion erstellen, die den Maximalwert einer beliebigen Eigenschaft aus einer Liste von Foo s.

Zum Beispiel so:

def getMax(Foos:List[Foo], Property:??) = Foos.map(_.Property).sort(_ > _).head

Wenn ich anrufe getMax(myFooList, Prop1) wird der Wert des höchsten Prop1 aus dieser Liste von Foo s.

Meine Frage ist, wie kann ich das bewerkstelligen? Ich schätze, ich könnte eine Art von Enum (das Scala-Äquivalent) für die Property und machen eine match und führen Sie dann die map auf die entsprechende Eigenschaft, aber das scheint eine Menge Arbeit zu sein - ich müsste meine Aufzählung und die Funktion jedes Mal erweitern Foo umgestaltet wird.

Auch, nicht so wichtig, aber gibt es einen besseren Weg, um den maximalen Wert einer Liste als zu greifen, was ich tat?

0voto

Thiago Mata Punkte 2583

Bitte denken Sie daran, zu prüfen, ob die Liste nicht null ist, sonst schlägt die maxBy-Methode fehl

val myList: List[Foo] = List();

val unsafeMax = myList.maxBy(_.propertyBar).propertyBar
// java.lang.UnsupportedOperationException: empty.max

val safeMax = if (myList.isEmpty) 0 else myList.maxBy(_.propertyBar).propertyBar;
safeMax == 0

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X