Mus*_*ess 3 arrays scala instantiation multidimensional-array
我正在尝试编写一个程序来通过Scala Gui来管理数据库,并且在将数据输入表格并填充列标题的方式上格式化数据时遇到了很多麻烦.为此,我被告知我需要使用Array [Array [Any]]而不是像我一直使用的ArrayBuffer [ArrayBuffer [String]].
我的问题是我试图填充这些数组的方式是模块化的:我试图使用相同的函数从MySQL数据库中的不同表中绘制,每个表都有不同数量的列和条目.
我已经能够(我认为)定义一个二维数组
val Data = new Array[Array[String]](numColumns)(numRows)
Run Code Online (Sandbox Code Playgroud)
但我还没有找到任何方法来编辑这个新阵列中的单个单元格.
Data(i)(j)=Value //or
Data(i,j)=Value
Run Code Online (Sandbox Code Playgroud)
不起作用,并给我关于"更新"功能的错误
我确信这不可能像我一样复杂,所以用这种语言管理这些东西的简单方法是什么?
您不需要将数据读入阵列数组 - 只需在将其提供给Table构造器时将其转换为该格式- 这很容易,如我对其他问题的回答所示:我如何配置Scala表中的列名?
如果你正在创建一个2D数组,你想要的成语是
val data = Array.ofDim[String](numColumms, numRows)
Run Code Online (Sandbox Code Playgroud)
(也有new Array[String](numColumns, numRows),但已被弃用.)
您访问数组元素的(I,J)data与data(i)(j)(记得他们从0开始).
但一般来说,除非有充分的理由,否则应该避免使用可变集合(如Array,ArrayBuffer).试试吧Vector.
如果不知道从数据库中检索数据的格式,就无法说明如何将其放入集合中.
更新:
您也可以将类型信息放在左侧,因此以下内容相同(根据您的喜好自行决定):
val a: Array[Array[String]] = Array.ofDim(2,2)
val a = Array.ofDim[String](2,2)
Run Code Online (Sandbox Code Playgroud)
要解释访问/更新元素的语法:在Java中,多维数组只是一个数组数组.所以在这里,a(i)是的元素i,其中Array[String],所以a(i)(j)是数组,这是一个的单元j String.