Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
Arrays 如何在Scala中实现数组中组合的生成_Arrays_Algorithm_Scala_Combinations - Fatal编程技术网

Arrays 如何在Scala中实现数组中组合的生成

Arrays 如何在Scala中实现数组中组合的生成,arrays,algorithm,scala,combinations,Arrays,Algorithm,Scala,Combinations,我想要一个函数的Scala代码,给定一个数组,它生成数组的k个组合 考虑生成由5个元素组成的数组的3个组合。例如,函数(例如computeNCK)的行为如下: computeNCK(Array(1,2,3,4,5),3) = Array(Array(1, 2, 3), Array(1, 2, 4), Array(1, 2, 5), Array(1, 3, 4), Array(1, 3, 5), Array(1, 4, 5), Array(2, 3, 4), Array(2, 3, 5), Arr

我想要一个函数的Scala代码,给定一个数组,它生成数组的k个组合

考虑生成由5个元素组成的数组的3个组合。例如,函数(例如
computeNCK
)的行为如下:

computeNCK(Array(1,2,3,4,5),3) = Array(Array(1, 2, 3), Array(1, 2, 4), Array(1, 2, 5), Array(1, 3, 4), Array(1, 3, 5), Array(1, 4, 5), Array(2, 3, 4), Array(2, 3, 5), Array(2, 4, 5), Array(3, 4, 5))
该程序的工作原理类似于
列表
的组合(n:Int):迭代器[List[A],但我想处理
数组

注意:我想到的代码直接处理
数组
,而不是首先计算其他数据类型(如
列表
)并将其转换为
数组
(使用
toArray

换句话说,该程序就像下面的Scala代码的“数组版本”,用于计算k组合

  def computeNCK[A](l:List[A], n: Int): List[List[A]] =
    if (n > l.size) Nil
    else l match {
      case _ :: _ if n == 1 => l.map(List(_))
      case hd :: tl => computeNCK(tl, n - 1).map(hd :: _) ::: computeNCK(tl,n)
      case _ => Nil
  }

你不能使用Array.combines方法吗

scala> Array("a","b","c", "d").combinations(2).toList
res0: List[Array[String]] = List(Array(a, b), Array(a, c), Array(a, d), Array(b, c), Array(b, d), Array(c, d))

组合(n:Int)
也适用于
数组
<代码>数组(1,2,3,4,5)。组合(3)返回类型为
Iterator[Array[Int]]]
No的值。我需要函数返回
Array[Array[Int]
而不是
Iterator[Array[Int]]
,因为
Iterator
在迭代海量数据时存在性能问题。当然,
Array(1,2,3,4,5).组合(3).toArray
不适用于我的目的,原因是。不,它不适用于我的目的。正如我在问题中所写的那样,我需要避免使用类型转换,如
toList
toArray
,因为我必须缩放此函数,因此此类类型转换会造成显著的性能损失。