Veri kümemi iki koşulda bir kerede filtrelemek istiyorum.İki koşulda Scala filtresi
Mümkün mü?
mystuff = mystuff.filter(_.isX && _.name == "xyz")
Veri kümemi iki koşulda bir kerede filtrelemek istiyorum.İki koşulda Scala filtresi
Mümkün mü?
mystuff = mystuff.filter(_.isX && _.name == "xyz")
biraz daha az özlü lambda sözdizimi kullanarak::
mystuff = mystuff.filter(x => (x.isX && x.name == "xyz"))
Sen Scala anonim işlev sözdizimi here ilgili daha fazla ayrıntı bulabilirsiniz
Böyle bir şey istiyorum.
bazı performans etkisi "MyStuff" ne bağlı olabilir ancak her zaman, sık sık çeşitli yüklemi filtre gerekirse iki kez
mystuff = mystuff.filter(_.isX).filter(_.name == "xyz")
Bu, tüm listenin çift döngüsüne neden olur. – squixy
@squixy sadece bir FYI, değil. 'filter', koleksiyonun yeni bir projeksiyonunu (veya görünümünü) oluşturur; böylece, bir elemanın yineleme sırasında (yani' map', 'fold', vb.) istenmesi durumunda' filter' (fonksiyonlar) fonksiyonuna uygulanır. öğenin geri dönüp dönmediğine bakın – ThaDon
, bunları birleştirmenin bir yolunu tanımlayabiliriz filtre olabilir:
scala> (0 until 20) filter And(_ > 10, _ % 2 == 1)
res3: scala.collection.immutable.IndexedSeq[Int] = Vector(11, 13, 15, 17, 19)
: Burada
case class And[A](p1: A=>Boolean, p2: A=>Boolean) extends (A=>Boolean) {
def apply(a: A) = p1(a) && p2(a)
}
10 daha büyük tek tek sayılar tutmak için nasıl kullanılacağını olduğunu
Or
ve Not
komütatörler aynı şekilde yazılabilir.
bu, performans ek yükünü ortadan kaldırır mı? Yani son sorguda bu doğru bir şekilde ifade edildi mi? – zinking