Function 左截断Scala函数-从整数列表
我是Scala的新手,你能帮我介绍一下简单的函数吗- 输入参数是一个整数,函数应该返回一个整数列表,第一个条目是input integer,其余的通过逐个省略最左边的数字来获得。比如说, 如果输入为Function 左截断Scala函数-从整数列表,function,scala,Function,Scala,我是Scala的新手,你能帮我介绍一下简单的函数吗- 输入参数是一个整数,函数应该返回一个整数列表,第一个条目是input integer,其余的通过逐个省略最左边的数字来获得。比如说, 如果输入为0,则返回List(0),input=5678返回List(5678678,78,8) 提前非常感谢如果您能分享您的尝试,那将是一件非常有趣的事情,我们也可以尝试一下。:)我希望你有一些想法,这里有一些来自我这边的想法 "5678".foldRight(Seq[String](""))((c, s)
0
,则返回List(0)
,input=5678
返回List(5678678,78,8)
提前非常感谢如果您能分享您的尝试,那将是一件非常有趣的事情,我们也可以尝试一下。:)我希望你有一些想法,这里有一些来自我这边的想法
"5678".foldRight(Seq[String](""))((c, s) => s"$c${s.head}" +: s).dropRight(1)
"5678".foldRight(Seq[String]())((c, s) => s"$c${s.headOption.getOrElse("")}" +: s)
将数字转换为字符串。然后,tails
完全按照您的要求执行。除了它是一个迭代器,所以将它转换为列表
,并且它的末尾有一个空字符串,所以使用init
返回除最后一个元素之外的所有元素。但是它们是字符串,所以再次使用map
将它们全部转换为Int
但我很确定你的导师希望你用数字来表达:)
这里有一个数字版本,在这种情况下,故意不加注释,这样你就可以自己计算出它是如何工作的
val n = 5678
val digits = n.toString.size
List.iterate(10, digits)(10*) map { n % _}
编辑:按照注释中的要求,另一种方法只是使用inits而不是tails(和一个相反的方法来获得请求的顺序)
这样数值计算就更容易了
List.iterate(n, digits)(_/10).reverse
你这边有什么尝试吗?家庭作业问题对吧?顺便说一句,我这么说并不是想让你生气,但你会通过自己尝试学到更多,然后来这里问你的解决方案有什么问题,如果有的话。负数怎么办?@Alexis C-我应该把我的代码放在问题中,agreeScala简直太棒了。:)<代码>尾部非常有意义。奇怪的是,如果我们想要
列表(5,56,567,5678)
,你是怎么做到的?@Paul非常感谢,我尝试了正确的方向,知道如何使用map吗
val n = 5678
val digits = n.toString.size
List.iterate(10, digits)(10*) map { n % _}
5678.toString.inits.toList.init.reverse.map(_.toInt)
//> res0: List[Int] = List(5, 56, 567, 5678)
List.iterate(n, digits)(_/10).reverse