我有以下输入字符串:
"0.3215,Some(0.5123)"
我想使用:(0.3215,Some(0.5123))
检索元组(BigDecimal,Option[BigDecimal])
。
这是我到目前为止所做的一件事:
"\\d+\\.\\d+,Some\\(\\d+\\.\\d+".r findFirstIn iData match {
case None => Map[BigDecimal, Option[BigDecimal]]()
case Some(s) => {
val oO = s.split(",Some\\(")
BigDecimal.valueOf(oO(0).toDouble) -> Option[BigDecimal](BigDecimal.valueOf(lSTmp2(1).toDouble))
}
}
使用Map
并将其转换为元组。
当我直接尝试元组时,我得到Equals
或Object
。
这里一定要错过......
答案 0 :(得分:4)
您的代码有几个问题,但最重要的一点似乎是匹配的case None
方会返回Map
,但Some(s)
方会返回Tuple2
。 Map
和Tuple2
统一到他们最常见的超类型Equals
,这就是您所看到的。
我认为这是你想要实现的目标?
val Pattern = "(\\d+\\.\\d+),Some\\((\\d+\\.\\d+)\\)".r
val s = "0.3215,Some(0.5123)"
s match {
case Pattern(a,b) => Map(BigDecimal(a) -> Some(BigDecimal(b)))
case _ => Map[BigDecimal, Option[BigDecimal]]()
}
// Map[BigDecimal,Option[BigDecimal]] = Map(0.3215 -> Some(0.5123))