首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Long转换到List[Int]

从Long转换到List[Int]
EN

Stack Overflow用户
提问于 2014-03-30 22:40:17
回答 3查看 3.5K关注 0票数 2

我正在尝试将一个Long转换为一个List[Int],其中列表中的每一项都是原始长的一个数字。

代码语言:javascript
运行
复制
scala> val x: Long = 123412341L
x: Long = 123412341

scala> x.toString.split("").toList
res8: List[String] = List("", 1, 2, 3, 4, 1, 2, 3, 4, 1)

scala> val desired = res8.filterNot(a => a == "")
desired: List[String] = List(1, 2, 3, 4, 1, 2, 3, 4, 1)

使用split("")会产生一个""列表元素,这是我最初不想要的。

我可以简单地过滤它,但是我是否有可能更干净地从123412341LList(1, 2, 3, 4, 1, 2, 3, 4, 1)呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-30 23:31:22

如果您想要数字的整数值,可以这样做:

代码语言:javascript
运行
复制
scala> x.toString.map(_.asDigit).toList
res65: List[Int] = List(1, 2, 3, 4, 1, 2, 3, 4, 1)

请注意.map(_.asDigit)所产生的差异:

代码语言:javascript
运行
复制
scala> x.toString.toList
res67: List[Char] = List(1, 2, 3, 4, 1, 2, 3, 4, 1)

scala> res67.map(_.toInt)
res68: List[Int] = List(49, 50, 51, 52, 49, 50, 51, 52, 49)

x.toString.toList是一个字符列表,即List('1','2','3',...)。列表的toString呈现使它看起来是一样的,但两者是完全不同的--例如,一个'1‘字符的整数值为49。您应该使用的数字取决于您是否需要数字字符或它们所代表的整数。

票数 13
EN

Stack Overflow用户

发布于 2014-03-30 23:50:25

正如Alexey在下面指出的,这段代码存在严重问题:\不要使用它。

不使用字符串转换:

代码语言:javascript
运行
复制
def splitDigits(n:Long): List[Int] = {
  n match {
    case 0 => List()
    case _ => {
      val onesDigit = (n%10)
      splitDigits((n-onesDigit)/10) ++ List( onesDigit.toInt )
    }
  }
}

给予:

代码语言:javascript
运行
复制
splitDigits(123456789)    //> res0: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
splitDigits(1234567890)   //> res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
splitDigits(12345678900L) //> res2: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0)

该函数不是尾递归函数,但对于长值,它应该工作得很好:

代码语言:javascript
运行
复制
splitDigits(Long.MaxValue) //> res3: List[Int] = List(9, 2, 2, 3, 3, 7, 2, 0, 3, 6, 8, 5, 4, 7, 7, 5, 8, 0, 7)
票数 1
EN

Stack Overflow用户

发布于 2014-03-30 22:55:30

快一点,有点烦躁:

代码语言:javascript
运行
复制
x.toString.map(_.toString.toInt).toList
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22750852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档