迭代不可变数组并基于其他元素更新数组中的每个元素

时间:2012-11-23 03:32:58

标签: arrays scala functional-programming immutability

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

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

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

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

1 个答案:

答案 0 :(得分: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)))

如果没有,希望它能给你足够的领先优势。否则,您可能需要更多地澄清您的问题。