代码之家  ›  专栏  ›  技术社区  ›  stack0114106

scala-根据数据类型字符串进行匹配并获取其频率

  •  0
  • stack0114106  · 技术社区  · 7 年前

    我有来自配置单元表模式的以下数据类型详细信息,需要获取其频率

    val a = List("decimal(10,2)","string","string","decimal(6,0)",
                  "timestamp","decimal(8)", "timestamp" )
    
    val freq = a.map{
      x => x match {
        case  x.contains("decimal") => "decimal" // getting error here
        case "string" => "string"
        case "timestamp" => "date"
      }
    }.groupBy(identity).mapValues(_.length)
    
    println(freq)
    

    我错误地说,无法解析符号。。密码怎么了?。

    Map(date -> 2, decimal -> 3, string -> 2)
    

    1 回复  |  直到 7 年前
        1
  •  4
  •   jwvh    7 年前

    你也可以 fold List

    val freq = a.foldLeft(Map[String,Int]().withDefaultValue(0)){
      case (m,s) if s.startsWith("decimal") => m + ("decimal" -> (m("decimal")+1))
      case (m,"timestamp") => m + ("date" -> (m("date")+1))
      case (m,str)         => m + (str    -> (m(str)+1))
    }
    
        2
  •  4
  •   Brian    7 年前

    你可以在第一个模式匹配中使用一个守卫来完成你要做的事情。

    val freq = a.map{
      x => x match {
        case  x if  x.contains("decimal") => "decimal" // getting error here
        case "string" => "string"
        case "timestamp" => "date"
      }
    }.groupBy(identity).mapValues(_.length)
    
    推荐文章