【问题标题】:beginner scala pattern matching - split a#b by # and assign to Map初学者 scala 模式匹配 - 按 # 拆分 a#b 并分配给 Map
【发布时间】:2013-11-06 08:16:32
【问题描述】:

我想编写一些 scala 代码来执行以下操作:-

将 ["a#b","c#"] 列表转换为映射,其中 # 之前的部分作为键,如果值存在,# 之后的部分作为值。

因此,对于上述数组,地图将是:

{
 "a" => "b" // no "c" because it does not have a value.
}

用 scala 风格表达这一点的最优雅的方式是什么?另外,scala 中的 null 检查是如何进行的?

谢谢!

【问题讨论】:

    标签: scala


    【解决方案1】:
    scala> val list = List("a#b", "c", "d#e", "")
    
    scala> list.map(x => x.split("#")).filter(_.size == 2).map(arr => (arr(0), arr(1))).toMap
    res1: scala.collection.immutable.Map[String,String] = Map(a -> b, d -> e) 
    

    【讨论】:

    • 我同意这是简洁的。但这是否符合 Scala 标准?在 scala 的一行中通常会发生大量的事情吗?
    • @ajay 如果愿意,您可以将中间值放在多行上。 split 和 filter 在这里非常地道。它变得有点混乱,因为每个字符串上的split 给你留下了List[Array[String]。每个Array(来自split)都被转换为Map,然后你合并地图。还有其他方法可以解决它,但使用 split 会变得一团糟。
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2014-02-05
    • 2016-03-29
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多