我有这个Scala代码,为意大利彩票喷出独特的随机数字:
object Enalotto {
def main(args: Array[String]): Unit = {
val numbers = scala.collection.mutable.SortedSet[Int]()
val r = scala.util.Random
while(numbers.size < 6) {
numbers += r.nextInt(90) + 1
}
for ((number, index) <- numbers.view.zipWithIndex) {
if(number < 10) print("0")
print(number)
if(index < 5) print(" - ")
}
println("")
}
}
我想问一下,如何用更不合适的函数式编程编写带有不可变集合的相同程序?
提前致谢。
答案 0 :(得分:3)
List.iterate(0,7)(_ => util.Random.nextInt(90) + 1)
.tail
.sorted
.mkString(" - ")
这是您的生成器和格式化程序。
说明:我正在调用iterate()
随播广告对象的List
方法。它创建一个新的List
个7个元素,从值0开始。对于之后的每个值,它调用生成随机值的匿名函数。
现在我们有了我们的清单。取tail
,因为我们实际上对起始0值不感兴趣。
对结果进行排序,然后将List
转换为String
,其元素用字符串&#34分隔; - &#34;。
答案 1 :(得分:2)
如果您需要6个唯一数字,最简单的方法是随机播放整个范围,只需从结果中取出前六个数据:
val numbers = util.Random.shuffle(1 to 90).take(6).sorted
val formatted = numbers map {"%02d".format(_)} mkString " - "
println(formatted)
答案 2 :(得分:0)
选项1。
def addNumber(l: List[Int], n : Int) : List[Int] = n::l
选项2.使用发电机:
for{
i <- 0 to 6
r = scala.util.Random
} yield r;
一般来说,有很多方法可以用FP方式编码。 其余的代码看起来还不错。