Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不可变Scala集合_Scala_Collections_Functional Programming_Immutability_Immutable Collections - Fatal编程技术网

不可变Scala集合

不可变Scala集合,scala,collections,functional-programming,immutability,immutable-collections,Scala,Collections,Functional Programming,Immutability,Immutable Collections,我有一个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

我有一个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("")
  }
}
objectenalotto{
def main(参数:数组[字符串]):单位={
val numbers=scala.collection.mutable.SortedSet[Int]()
val r=scala.util.Random
而(数字。大小<6){
数字+=r.nextInt(90)+1
}
用于((编号、索引)
  • 将可变集合替换为不可变集合
  • Add函数添加随机数,如:
  • 备选案文1

    def addNumber(l: List[Int], n : Int) : List[Int] = n::l 
    
    选项2.使用发电机:

    for{
      i <- 0 to 6
      r = scala.util.Random
    } yield  r;
    
    用于{
    我
    
  • 将可变集合替换为不可变集合
  • Add函数添加随机数,如:
  • 备选案文1

    def addNumber(l: List[Int], n : Int) : List[Int] = n::l 
    
    选项2.使用发电机:

    for{
      i <- 0 to 6
      r = scala.util.Random
    } yield  r;
    
    用于{
    我
    这是您的生成器和格式化程序


    说明:我正在调用
    List
    伴生对象的
    iterate()
    方法。它创建一个由7个元素组成的新
    List
    ,从值0开始。对于之后的每个值,它调用生成随机值的匿名函数

    现在我们有了我们的列表。使用
    尾部
    ,因为我们实际上对起始值0不感兴趣

    对结果进行排序,并将
    列表
    转换为
    字符串
    ,元素之间用字符串“-”分隔

    这是您的生成器和格式化程序


    说明:我正在调用
    List
    伴生对象的
    iterate()
    方法。它创建一个由7个元素组成的新
    List
    ,从值0开始。对于之后的每个值,它调用生成随机值的匿名函数

    现在我们有了我们的列表。使用
    尾部
    ,因为我们实际上对起始值0不感兴趣


    对结果进行排序,并将
    列表
    转换为一个
    字符串
    ,元素之间用字符串“-”分隔

    如果需要6个唯一的数字,最简单的方法是随机排列整个范围,只需从结果中选取前6个:

    val numbers = util.Random.shuffle(1 to 90).take(6).sorted
    val formatted = numbers map {"%02d".format(_)} mkString " - "
    println(formatted)
    

    如果您需要6个唯一的数字,最简单的方法是随机洗牌整个范围,只需从结果中选取前6个:

    val numbers = util.Random.shuffle(1 to 90).take(6).sorted
    val formatted = numbers map {"%02d".format(_)} mkString " - "
    println(formatted)
    


    所以,据我所知,迭代是部分函数?它接受尾部作为列表进行处理。?@PavelOliynyk,解释补充道,“使用映射到小于10的零数字。”呃,这不是OP的原作。那个零填充的单位数!好好看看我的代码:while循环不仅可以迭代6次,而且可以迭代到集合有6个元素,事实上,一个相等的随机数不会被添加到一个集合中。你的答案很好,但恐怕它只迭代了6次,我错了吗?@MirkoBenedetti所以你接受了“非常好”,但完全错误的答案?你想要6个不同的数字,对吗?所以迭代是我理解的部分函数?它接受尾部作为列表进行处理。?@PavelOliynyk,解释补充道。“使用映射到小于10的零数字,”呃,这不是OP的原作。那个零填充的单位数!好好看看我的代码:while循环不仅可以迭代6次,而且可以迭代到集合有6个元素,事实上,一个相等的随机数不会被添加到一个集合中。你的答案很好,但恐怕它只迭代了6次,我错了吗?@MirkoBenedetti所以你接受了“非常好”,但答案完全错误?你想要6个不同的数字,对吗?你的结果类型是
    Vector
    ,而不是
    SortedSet
    。val list={for{i这取决于您下一步计划做什么……您是否可以使用评估模型??取决于您希望的速度,从
    向量
    转换到
    列表
    (或
    排序集
    )需要时间。向量在性能方面更快:))一切都取决于你的计划你的结果类型是
    Vector
    ,而不是
    SortedSet
    。val list={对于{i},它取决于你下一步打算做什么……你对评估模型满意吗??取决于你希望它的速度,从
    Vector
    转换到
    list
    (或
    SortedSet
    )需要时间。向量在性能方面更快:)这一切都取决于您的计划为何要在此处使用不可变集合?这是可能的(例如,递归,因为您不知道原始集合大小),但不合理,至少在
    while
    循环中不合理。一种可能的解决方案(如果将
    +
    替换为
    +=
    ,也可以使用可变集合):
    Stream.iterate(collection.immutable.SortedSet[Int]())(+(util.Random.nextInt(90)+1)).dropWhile(u.size<6).head
    这只是为了示例的缘故。为什么要在这里使用不可变集合?这是可能的(例如,递归,因为您不知道原始集合大小),但不会被证明是正确的,至少在
    while
    循环中不会。一种可能的解决方案(如果您将
    +
    替换为
    +=
    ),也适用于可变集合):
    流。迭代(collection.immutable.SortedSet[Int]()(+(util.Random.nextInt(90)+1))。dropWhile(0.size<6).head
    这只是为了示例。如果需要将6从
    1区分为1000000,会发生什么?如果需要将6从
    1区分为1000000,会发生什么?