Scala - for 循环与 yield 示例

本文详细介绍了Scala中for+yield语法在处理Map数据时的应用。通过示例展示了如何利用for循环和yield关键字进行数据转换、条件控制以及不同类型数据结构的保持。同时,提醒注意在处理大量数据时可能引发的内存问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.引言

 

对 Map 数据进行翻转时,用到了 for 循环 + yield 的语法,在此记录一下 for + yield 的相关使用。yield 负责将 for 循环中的数据保存下来,待循环结束后返回保存的数据,即 for + yield 有返回值,其返回类型由 for 循环的原始数据类型决定, Array -> Array、Set -> Set,Map -> Map 依次类推。

二.相关示例

1.For + Yield Demo

循环中 yield 将数据缓存下来,保存在对应数据结构中,循环结束后返回,这里给出最基本的数组示例,这里将数组中的数据乘二得到最后的结果,multiplyYield 的类型也是 Array。

   val range = (1 to 10).toArray
   val multiplyYield = for (num <- range) yield 2 * num
   println(multiplyYield.mkString(","))

2.For + Yield & If 条件控制

for 循环过程中,可以通过 if 控制哪些数据执行 yield 逻辑,for 循环中可以添加单个和多个 if 对数据进行筛选。

A.单独 If 条件控制

    val conditionYield = for (num <- range if num > 5) yield num + 3
    println(conditionYield.mkString(","))

B.多重 If 条件控制

    val multiConditionYield = for {
      num <- range
      if num % 2 == 0
      if num > 5
    } yield num * 10
    println(multiConditionYield.mkString(","))

3.For + Yield 不改变数据结构类型

前面示例中均采用 Array,返回的也都是 Array,通过 Set,List 实验可以发现,For + Yield 的对应关系。

    val testSet = mutable.Set("1", "2", "3")
    val setYield = for (elem <- testSet) yield elem
    println(setYield)

    val testList = Array("0", "1", "2").toList
    val listYield = for (elem <- testList) yield elem
    println(listYield)

4.For + Yield 数据量

for 循环时 yield 产生的数据类似于缓存,因此需要注意 for 期间生成的数据量,数据量过大时会导致 GC overhead limit exceeded。

    val testNums = 0 until Int.MaxValue
    val numsYield = for (elem <- testNums) yield elem

三.总结

For + Yield 可以循环生成数据且不改变数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIT_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值