首页 > 解决方案 > 为什么将 for 表达式转换为 Double 会导致意外序列?

问题描述

我一直在玩表情,发现自己正在处理一个意想不到的结果。我最好用一个例子来说明:

  val someList = List(2.2, 3.4)

  val strangeDoubles = for {
    s <- someList.toString.replace(".", "")
  } yield s.toDouble

  println(strangeDoubles)

  // result: ArraySeq(76.0, 105.0, 115.0, 116.0, 40.0, 50.0, 50.0, 44.0, 32.0, 51.0, 52.0, 41.0)

我的理解是带有单个循环的 for 表达式变成了forEach. 但是,我不太确定数组如何结束具有以下数字。我本来希望结果是这样的: List(22.0, 34.0)

标签: scala

解决方案


您将List变成一个大字符串,然后在字符串的每个Char上执行map (not foreach),然后将每个Char转换为Double,这是通过首先将每个字符转换为其ASCII代码来完成的。

我真的不明白您为什么将整个列表变成String,也许您想对每个元素都这样做?
像这样:

val strangeDoubles = for {
  d <- someList
  s = d.toString.replace(".", "")
} yield s.toDouble

或者在这种情况下,我会直接打电话map

someList.map { d =>
  d.toString.replace(".", "").toDouble
}

推荐阅读