我正在编写一个Scala程序来管理数据库,并将所有数据绘制到一个二维ArrayBuffer中,其中第0行是列名,后续行包含表中每个条目的信息。 当试图将它放入表中时,我还是要分配列标题吗?
非常感谢语法建议。
伪代码:
Data=ArrayBuffer()
Data(0)={"Name","Birthday","ID"}
Data(1)={"Bob", "07/19/1986", "2354"}
Data(2)={"Sue", "05/07/1980", "2355"}
Data(3)={"Joe", "08/12/1992", "2356"}
Data(4)={"Jim", "11/20/1983", "2357"}
我想把它放到一个表中,其中Data(0)描述列标题,后续行描述表中的行,但我无法弄清楚如何设置行标题。
答案 0 :(得分:3)
将数据放入表中的最简单方法是使用其构造函数:
new Table (rowData: Array[Array[Any]], columnNames: Seq[_])
这里有点棘手的问题是数组不是协变的(参见Why doesn't the example compile, aka how does (co-, contra-, and in-) variance work?),这意味着Array[String]
不是Array[Any]
的子类型。所以你需要一种方法将一个转变为另一个:map
完成工作。
此外,要显示列名,您需要将表放在ScrollPane中。
import swing._
import collection.mutable.ArrayBuffer
object Demo extends SimpleSwingApplication {
val data = ArrayBuffer(
Array("Name","Birthday","ID"),
Array("Bob", "07/19/1986", "2354"),
Array("Sue", "05/07/1980", "2355")
)
def top = new MainFrame {
contents = new ScrollPane {
contents = new Table(
data.tail.toArray map (_.toArray[Any]),
data.head
)
}
}
}
会给你一张桌子:
编辑:您还可以使用强制转换:data.tail.toArray.asInstanceOf[Array[Array[Any]]]
,这比映射效率更高。
答案 1 :(得分:0)
假设您正在讨论swing,如果将表放在滚动窗格内并根据显示的数组缓冲区创建表模型,则默认情况下第一行将作为列名。