【问题标题】:Scala repeat ArrayScala重复数组
【发布时间】:2023-03-06 15:32:01
【问题描述】:

我是scala 的新手。我尝试编写一个“重复”Array(Scala 2.9.0)的函数:

def repeat[V](original: Array[V],times:Int):Array[V]= {
if (times==0)
   Array[V]()
else
  Array.concat(original,repeat(original,times-1)
}

但我无法编译它(收到关于 manifest 的错误)...

【问题讨论】:

    标签: arrays scala


    【解决方案1】:

    你需要让编译器为V提供类清单:

    def repeat[V : Manifest](original: Array[V], times: Int): Array[V] = ...
    

    问题的答案:为什么需要,您可以在这里找到:

    Why is ClassManifest needed with Array but not List?

    我不确定你想在哪里使用它,但我一般可以建议你使用List 或其他合适的集合来代替Array

    【讨论】:

    • 我想扩展一个需要数组作为输入的类(更具体地说是 scalala 中的 DenseMatrix 类)。那里(@specialized)数字类型被隐式转换为“标量”。但是你总是需要给出整个数组。我想有一种接近“R”的方法,即当数组没有所需的长度时,只需重复并可能剪切它以使其适合...
    【解决方案2】:

    顺便说一句,另一种重复数组的方法是用数组的引用“填充”Seq,然后将其展平:

    def repeat[V: Manifest](original: Array[V], times: Int) : Array[V] = 
      Seq.fill(times)(original).flatten.toArray;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 2013-06-05
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      相关资源
      最近更新 更多