【发布时间】:2020-02-16 20:50:14
【问题描述】:
我有一个这样声明的 ListBuffer:
var distances_buffer: ListBuffer[List[Any]] = ListBuffer.empty[List[Any]]
我正在尝试用这样的数据填充它:
for(current <- 0 to training_list_length - 1){
//A and B are examples
distances_buffer(current) ++= List[Any](A,B)
}
但是我得到以下错误:
java.lang.IndexOutOfBoundsException: 0
我错过了什么?
编辑!更多信息:
我有一个点及其类别的列表(名称:training_list)。 (x,y,类):
training_list : List[((Double, Double, String))]
我还有一个额外的点,给出了一个 x 和一个 y 值。
我的目标是计算额外点与训练列表中每个点的欧几里得距离,并创建一个如下所示的结果:
//example
List((x: Double, y: Double, class: String), distance: String)
List((4.3,3.0,Iris-setosa), 1.2529964086141665), (4.4,3.0,Iris-setosa), 1.341640786499874)...
如您所见,在列表中我想包括点的坐标(来自 training_list)、点的类别以及距离。
for(current <- 0 to training_list_length - 1){
val dist = eDistance(test_x, test_y, training_x(current), training_y(current))
distances_buffer += ListBuffer[Any](training_result(current),dist)
}
创建此列表后,我想根据距离对其进行排序。也卡在这里了!
【问题讨论】:
-
我认为你真的想要这个
distances_buffer += List(A, B)。您的代码试图在位置current的ListBuffer 内的内部List 中添加元素。而我相信您只想将内部 Lists 附加到缓冲区。 - PS:可变性和Any都是 Scala 上的代码异味,你确定你的建模最适合你的问题吗? -
好吧,这成功了!所以要明确一点,这就是
++=和+=之间的区别?另外,你能否解释一下 P.S.部分? -
xs ++= ys表示将ys的所有元素(必须是A的某种集合)到xs(有成为某种A集合的构建者)。而xs += x表示将x(必须是A的实例) 附加到xs(建造者)。另外问题是您试图通过索引访问空构建器的元素,这不仅是错误的,而且不是预期的用例。 - 我建议您与我们分享您更广泛的问题以及您如何尝试解决它,我很确定有更多惯用的方法来解决它。 -
您好,请检查编辑!
标签: scala list append indexoutofboundsexception listbuffer