带有比较和循环的Scala内联追加

时间:2018-07-08 02:17:42

标签: scala foreach comparison

我正在寻找Scala语法,用于使用比较将其附加到ArrayBuffer。我有两种不同类型的两个数组,所以我不能简单地使用交集。本质上,这就是我要寻找的:

val allPeople : ArrayBuffer[Person] = ...
val result = ArrayBuffer[Person]()
val acceptableAges : ArrayBuffer[Age] = ...

// Simplify below
for (p <- allPeople if acceptableAges.indexof(p.age) >= 0) 
    result.append(p)

是否有一个时尚的解决方案? Scala的新手。

1 个答案:

答案 0 :(得分:1)

请避免尽可能多地使用可变变量(这会花费时间,但每次看到可变var时都要自问)。有 scala fp

您正在寻找的是.filter函数。

以下是示例

scala> final case class Age(age: Int)
defined class Age

scala> final case class Person(name: String, age: Age)
defined class Person

给出:

scala> val allPeople = List(Person("prayagupd", Age(100)), Person("steven wilson", Age(200)))
allPeople: List[Person] = List(Person(prayagupd,Age(100)), Person(steven wilson,Age(200)))

scala> val acceptableAges : List[Age] = List(Age(100), Age(150))
acceptableAges: List[Age] = List(Age(100), Age(150))

使用.filter 过滤您的数据:

scala> allPeople.filter(p => acceptableAges.contains(p.age))
res2: List[Person] = List(Person(prayagupd,Age(100)))
相关问题