scala - 为什么将 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)
解决方案
您将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
}
推荐阅读
- sql - 转换、平均和投射后删除毫秒
- eslint - 抑制特定的 ESLint 警告:默认情况下忽略文件
- reactjs - 在 react-native-fs 中读取本地资产
- python - MusicBrainz Picard 错误标记视频文件
- haskell - 从输入将 [Int] 转换为 [Double]
- hyperledger-fabric - Hyperledger Fabric 上的多个通道 - IBM Bluemix 入门计划
- git - 使用 bundle 增量同步 git repos
- node.js - 无法在 Windows 上安装 Ionic
- nginx - 使用 Nginx 在 Ubuntu 服务器上部署多个 .Net Core 站点
- cloudkit - 获取 CloudKit 用户的(真实)电子邮件地址