删除2D数组中某些列的功能方法

时间:2015-06-29 20:55:43

标签: scala

假设我有一个Seq[Array[String]]形式的二维数组,其中第一个索引显示行。第一行始终是标题行。目标是过滤掉那些具有空标题的列。例如,如果表的内容是(3乘3,第一行作为标题):

 ,  t,
a,  c,  e 
b,  d,  f 

val table = Seq(Array("", "t", ""), Array("a", "c", "e"), Array("b", "d", "f"))

删除空标题后,显示所需的输出:

t
c
d

filter一个数组很容易,但这里的硬度是,需要根据标题行过滤所有数组。知道怎么做吗?

2 个答案:

答案 0 :(得分:4)

尝试:

val indices = table.head.zipWithIndex
                   .filter { case (t, i) => t != "" }
                   .map { case (t, i) => i }
table.map(indices collect _)
// > res: Seq[Array[String]] = List(Array(t), Array(c), Array(d))

答案 1 :(得分:2)

执行此操作的一种方法是使用transpose运算符:

table.transpose.filterNot(_.head.isEmpty)
> Seq[Seq[String]] = List(List(t, c, d))