Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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:可变列表的快速排序[Array[Double]]_Arrays_List_Scala_Quicksort - Fatal编程技术网

Arrays Scala:可变列表的快速排序[Array[Double]]

Arrays Scala:可变列表的快速排序[Array[Double]],arrays,list,scala,quicksort,Arrays,List,Scala,Quicksort,我使用的是一个可变列表[Array[Double]],其中每个数组包含五个Double 现在我想实现一个快速排序,它根据列表数组的第n列对列表进行排序。我查看了Rosetta上的快速排序示例,并提出了以下修改: def quicksortDataByIndex(index: Int, list: MutableList[Array[Double]]): MutableList[Array[Double]] = { if(list.isEmpty){ list } el

我使用的是一个
可变列表[Array[Double]]
,其中每个数组包含五个Double

现在我想实现一个快速排序,它根据列表数组的第n列对列表进行排序。我查看了Rosetta上的快速排序示例,并提出了以下修改:

def quicksortDataByIndex(index: Int, list: MutableList[Array[Double]]): MutableList[Array[Double]] = {
    if(list.isEmpty){
      list
    } else {      
      val(smaller, bigger) = list partition (_(index) > list.head(index))
      quicksortDataByIndex(index, smaller) += list.head ++= quicksortDataByIndex(index, bigger)
    }
  }
}
它在第n个元素抛出ArrayIndexOutOfBounds异常

我认为写“uz(index)”是错误的,但我不知道为什么,也不知道如何做得不同。
谢谢

这就是您想要的,我刚刚在分区之前添加了
.tail

def quicksortDataByIndex(index: Int, list: MutableList[Array[Double]]) : MutableList[Array[Double]] = {
  if(list.isEmpty){
    list
  } else {      
    val (smaller, bigger) = list.tail partition (a => a(index) < list.head(index))
    quicksortDataByIndex(index, smaller) += list.head ++= quicksortDataByIndex(index, bigger)
  }
}

谢谢不过我还是得到了同样的例外。在我的代码中,我使用了一个可变列表[Array[String]],因为它都是从文件中读取的,所以我添加了一个.toDouble:
(a=>a(index).toDouble>list.head(index.toDouble)
。这可能是错误的根源吗?编辑:我无法将数组中的所有字符串转换为双精度字符串,因为数组的第一个条目是名称,而不是值。不过,文件中隐藏了另一个错误!非常感谢。
quicksortDataByIndex(1, MutableList(Array(0, 3), Array(1, 2), Array(0, 7)))
// MutableList(Array(1.0, 2.0), Array(0.0, 3.0), Array(0.0, 7.0))