带有比较和循环的Scala内联追加
我正在寻找Scala语法,以便使用比较将其附加到ArrayBuffer。我有两个不同类型的数组,所以我不能简单地使用交集。本质上,这就是我想要的:带有比较和循环的Scala内联追加,scala,foreach,comparison,Scala,Foreach,Comparison,我正在寻找Scala语法,以便使用比较将其附加到ArrayBuffer。我有两个不同类型的数组,所以我不能简单地使用交集。本质上,这就是我想要的: val allPeople : ArrayBuffer[Person] = ... val result = ArrayBuffer[Person]() val acceptableAges : ArrayBuffer[Age] = ... // Simplify below for (p <- allPeople if acceptable
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)
val allPeople:ArrayBuffer[Person]=。。。
val结果=阵列缓冲[个人]()
val acceptableAges:ArrayBuffer[年龄]=。。。
//简化如下
对于(p=0)
结果追加(p)
有没有一个圆滑的解决方案?Scala新手。请尽量避免使用可变变量(这需要时间,但每次看到可变
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)))
很漂亮,谢谢你。我同意。我来自C++,所以我遇到了一些问题,这些问题可以用函数编程来解决。还在学习。非常感谢。我完全理解,但是在scala中不使用可变表是非常值得的。欢迎来到FP和scala。我可以告诉你这是一个非常好的社区