データセットを2つの条件で同時にフィルタリングしたいと思います。2つの条件でのスカラフィルタ
可能ですか?
私はこのような何かしたい:あなたはScalaの匿名関数の構文hereで詳細を見つけることができ
mystuff = mystuff.filter(x => (x.isX && x.name == "xyz"))
:わずかに少ない簡潔なラムダ構文を使用して
mystuff = mystuff.filter(_.isX && _.name == "xyz")
データセットを2つの条件で同時にフィルタリングしたいと思います。2つの条件でのスカラフィルタ
可能ですか?
私はこのような何かしたい:あなたはScalaの匿名関数の構文hereで詳細を見つけることができ
mystuff = mystuff.filter(x => (x.isX && x.name == "xyz"))
:わずかに少ない簡潔なラムダ構文を使用して
mystuff = mystuff.filter(_.isX && _.name == "xyz")
を。
「のMyStuff」は何であるかに応じて、いくつかのパフォーマンスへの影響があるかもしれませんが、あなたは常にあなたが頻繁にいくつかの述語でフィルタリングする必要がある場合は、あなたがそれらを組み合わせる方法を定義することができます二回
mystuff = mystuff.filter(_.isX).filter(_.name == "xyz")
フィルタリングできます。ここで
case class And[A](p1: A=>Boolean, p2: A=>Boolean) extends (A=>Boolean) {
def apply(a: A) = p1(a) && p2(a)
}
10より大きい奇数のみを保つためにそれを使用する方法である:
scala> (0 until 20) filter And(_ > 10, _ % 2 == 1)
res3: scala.collection.immutable.IndexedSeq[Int] = Vector(11, 13, 15, 17, 19)
同じ方法でOr
とNot
のコンビネータを書くのは簡単です。
これにより、パフォーマンスのオーバーヘッドがなくなりますか?私は最後のクエリでこれは正しく表現されているのですか? – zinking