Scala comprehension表达式

for comprehension


for comprehension是一种用于创建新集合的for表达式

Scala提供了轻量级符号来表示序列理解(sequence comprehensions)。理解具有形式for (enumerators) yield e,此处的enumerators指的是分号间隔的枚举器列表。枚举器表示引入新变量的生成器,或过滤器。理解计算通过枚举器生成的每个绑定的主体e,并且返回这些值的序列。

case class User(name: String, age: Int)

val userBase = List(User("Travis", 28),
  User("Kelly", 33),
  User("Jennifer", 44),
  User("Dennis", 23))

val twentySomethings = for (user <- userBase if (user.age >=20 && user.age < 30))
  yield user.name 

note:伴随yield的for循环创建了List。
note:user <- userBase是生成器。
note: if(user.age >= 20 && user.age < 20)是护卫,将非20s的用户过滤。

def foo(n: Int, v: Int) =
   for (i <- 0 until n;
        j <- i until n if i + j == v)
   yield (i, j)

note:生成二元组,二元组内元素的值位于0到n-1之间,并且两元素和为v。

理解并不仅限于列表,每个支持withFilter、map与flatMap操作的数据类型都可以被用于序列理解。

可以忽略理解中的yield,在这种情况下,理解返回Unit。

忽略yield

def foo(n:Int, v:Int) =
    for (i <- 0 until n; j <- i until n if i + j == v)
    println(s"($i, $j)")

翻译源:Scala Tour

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值