Ich habe ein Map[String, Int]
scala: Dynamisch mit Prädikaten Filterung
val labelMap: mutable.HashMap[String, Int] = sparse0.sparseOperationCountRowsByTarget()
ich die Karte in einer Anweisung filtern möchten. Der Filter kann sowohl filtern, indem String
oder Int
In gröbsten Form es wie folgt aussieht:
val labelMapFiltered = labelMap.filter(label => label._1.startsWith("REL") || label._2 < 400)
Jetzt habe ich bereits allgemeine Nützlichkeit Prädikate für Streich- und Int-Funktionen. Zeichenfolgenprädikate sind:
object StringPredicates
{
def stringEquals(required:String)(input:String) = input == required
def stringStartsWith(required:String)(input:String) = input.startsWith(required)
def stringContains(required:String)(input:String) = input.contains(required)
def and(predicates:Seq[String => Boolean])(input:String) = predicates.forall(predicate => predicate(input))
def or(predicates:Seq[String => Boolean])(input:String) = predicates.exists(predicate => predicate(input))
}
Int Prädikate sind das gleiche Muster wie oben.
Dies ermöglicht die folgenden Filter:
val sw1=stringContains("#")
val sw2=stringStartsWith("REL")
val sw3=intGT(400)
val labelMapFiltered = labelMap.filter(label =>sw1(label._1) || sw2(label._1) || sw3(label._2))
ich die Prädikate in die Funktion übergeben werden sollen (als Seq, nehme ich an) und dann filtern. So wie Ich suche etwas:
val labelMapFiltered = labelMap.filter(myFunction(myPredSeq))
Kann ich das die Prädikate mit habe ich schon? Das Schreiben von Prädikaten für Tuple2[String,Int]
, die mit der spezifischen Map in dieser Funktion übereinstimmen, erscheint zu spezifisch. Ich müsste dann Prädikate für jede Art von Map schreiben, die ich filtern möchte.
Die Scala Designer haben an alles gedacht :) – Jake