gpt4 book ai didi

scala - 计算列表中可以转换为 Int 的字符串数

转载 作者:行者123 更新时间:2023-12-04 02:58:11 26 4
gpt4 key购买 nike

例如,我的输入是:

scala> val myList = List("7842", "abf45", "abd", "56")
myList: List[String] = List(7842, abf45, abd, 56)
784256可以转换为 Int ;因此,我的预期输出是 2 .我们可以假设负整数不会发生,所以 -67不可能。

这是我到目前为止:
scala> myList.map(x => Try(x.toInt).getOrElse(-1)).count(_ > -1)
res15: Int = 2

这应该可以正常工作,但我觉得我缺少一个更优雅和可读的解决方案,因为我所要做的就是计算成功的次数。

最佳答案

我会警告不要在控制流中使用异常处理(如 Try )——它非常慢。

这是一个使用惯用 Scala 集合操作的解决方案,性能良好,并且不会计算负数:

scala> val myList = List("7842", "abf45", "abd", "56")
myList: List[String] = List(7842, abf45, abd, 56)

scala> myList.count(_.forall(_.isDigit))
res8: Int = 2

编辑:@immibis 指出这不会检测超过 Integer.MaxValue 的数字字符串.如果这是一个问题,我会推荐以下方法之一:
import scala.util.Try
myList.count(x => Try(x.toInt).filter(_ >= 0).isSuccess)

或者,如果您想在处理这种边缘情况的同时保持我的第一个答案的表现:
import scala.util.Try
myList.count(x => x.forall(_.isDigit) && Try(x.toInt).filter(_ >= 0).isSuccess)

关于scala - 计算列表中可以转换为 Int 的字符串数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42239201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com