如何在Scala表中配置列名?

时间:2011-11-07 22:39:41

标签: scala

我正在编写一个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)描述列标题,后续行描述表中的行,但我无法弄清楚如何设置行标题。

2 个答案:

答案 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
      )
    }
  }
}

会给你一张桌子:

table

编辑:您还可以使用强制转换:data.tail.toArray.asInstanceOf[Array[Array[Any]]],这比映射效率更高。

答案 1 :(得分:0)

假设您正在讨论swing,如果将表放在滚动窗格内并根据显示的数组缓冲区创建表模型,则默认情况下第一行将作为列名。