1

我有一个数组:(Array[[List[Int]]](81)这是一个 val )

我想按行分解它,如果该特定行中的任何元素在列表中只有一个元素,比如b.size= 1,那么我想从该列表中的所有其他列表中删除“b”中的那个元素数组的特定行。

我不确定,考虑到我不使用可变变量的约束,如何只考虑前 9 个元素,然后是数组中的下 9 个元素。(所以只是 vals 而不是 vars )。

到目前为止:我有一个接受列表和要从中删除的元素的函数。但是,如果我找到一个只有一个元素的列表,我该如何遍历上述数组中的每一行或数组中的每一列,然后返回行的开头,以更新列表中的其他元素,是我的问题。

4

1 回答 1

1

假设你的意思是你有一个Array[Array[List[Int]]],这听起来就像它会做你所追求的:

scala> def filterRow(arr:Array[List[Int]]):Array[List[Int]] = {
     |   val found:Option[Int] = arr.collectFirst{case List(x) => x};
     |   found.map(f =>
     |     arr.map(l =>
     |       if (l.size == 1) l else l.filterNot(_ == f)
     |     )
     |   ).getOrElse(arr)
     | }
filterRow: (arr: Array[List[Int]])Array[List[Int]]
scala> val a = Array(Array(List(1),List(1,2),List(1,2,3)),Array(List(2),List(1,2),List(1,2,3)))
a: Array[Array[List[Int]]] = Array(Array(List(1), List(1, 2), List(1, 2, 3)), Array(List(2), List(1, 2), List(1, 2, 3)))
scala> a.map(filterRow)
res0: Array[Array[List[Int]]] = Array(Array(List(1), List(2), List(2, 3)), Array(List(2), List(1), List(1, 3)))

如果没有,希望它能给你足够的线索来解决它。否则,您可能需要进一步澄清您的问题。

于 2012-11-23T05:38:58.850 回答