4

だから私はこの2を持っていますcollections:

import collection.mutable.ListBuffer

val list1 = ListBuffer[(String, String)]()
list1 += (("Italy", "valid"))
list1 += (("Germany", "not valid"))
list1 += (("USA", "not valid"))
list1 += (("Romania", "valid"))

val list2 = ListBuffer[String]()
list2 += "Germany"
list2 += "USA"
list2 += "Romania"
list2 += "Italy"
list2 += "France"
list2 += "Croatia"

conditionたとえば、特定の一般的な国を含む新しいリストを取得したいvalidので、結果は新しいリストになります:

Italy, Romania
4

4 に答える 4

7

同時に必要な場合はfilter、次を使用します。mapcollect

list1.collect { case (c, "valid") => c } intersect list2
于 2016-07-10T00:09:09.857 に答える
1

次のように理解のために a を使用すると、

for ((a,"valid") <- list1 if list2.contains(a)) yield a

flatMapこの理解は aと lazy フィルターに脱糖します。2 番目の項目が " に一致するタプルをパターン マッチ (抽出)し、検証された国が 2 番目のリストに属しているvalid"かどうかを確認します。

于 2016-07-10T16:41:30.493 に答える
0

フィルタリング、マッピングしてから交差する必要があると思います

list1 filter(_._2=="valid") map(_._1) intersect list2
于 2016-07-09T18:02:23.027 に答える
0

次のメソッドを定義できます。

def intersectWithCond[A, B](xs: Seq[(A, B)], ys: Seq[A])(cond: B => Boolean): Seq[A] = {
  xs.filter(x => cond(x._2)).map(_._1).intersect(ys)
}

使用法:

intersectWithCond(list1, list2)(_ == "valid") // returns ListBuffer(Italy, Romania)
于 2016-07-09T18:03:39.963 に答える