【问题标题】:Condition in Scala Map methodScala Map 方法中的条件
【发布时间】:2019-07-05 10:26:19
【问题描述】:

在 Python 中,我可以轻松地按条件创建一个新列表

list_1 = [1,2,3,4,5]
new_list = [e for e in list_1 if e>3]
# result [4,5]

但 Scala 的情况并非如此。我尝试使用地图地图方法

var array_1 = Array(1,2,3,4,5)
var new_array = array_1.map(e => if(e>3) e)
// result: [undefined, undefined, undefined, 4, 5]

这里有什么我不知道的魔法吗? 谢谢你帮助我

【问题讨论】:

  • array_1.filter(_ > 3)

标签: python arrays scala dictionary


【解决方案1】:

像这样试试filter

var new_array = array_1.filter(e => e > 3)

哪个输出

new_array: Array[Int] = Array(4, 5)

【讨论】:

    【解决方案2】:

    @Mario 建议的解决方案是在 scala 中实现此目标的首选方法。

    无论如何,您也可以通过使用类似于在 python 中完成的方式的 for comprehension 来实现这一点:

    for {e <- array_1; if e > 3} yield e
    

    此代码被脱糖为filter 方法调用。

    【讨论】:

      【解决方案3】:

      map只是对每个元素应用一个方法。

      filter是过滤每一个元素。

      您可以将它们组合成一个 collect 和一个 Partial Function

      Seq(0, 1, 2, 3, 4, 5).collect{
        case e if 3 < e => 2*e
      }
      

      【讨论】:

        猜你喜欢
        • 2012-05-12
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 2013-11-05
        • 2012-08-04
        • 1970-01-01
        • 2014-07-27
        相关资源
        最近更新 更多