我有一个数组:Array[[List[Int]]](81)
(这是一个val)
我想按顺序分解,如果特定行中的任何元素在列表中只有一个元素,比如b.size
= 1,那么我想要从数组的特定行中的每个其他列表中删除'b'中的元素。
我不确定,考虑到我不使用可变变量的约束,如何考虑前9个元素,然后是数组中接下来的9个元素。 (所以只是vals而不是vars)。
到目前为止: 我有一个函数接受列表和要从中删除的元素。 但是,我如何遍历上面数组中的每一行或数组中的每一列,并返回到行的开头,如果我找到一个只包含一个元素的列表,则更新列表中的其他元素,是我的问题。
答案 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)))
如果没有,希望它能给你足够的领先优势。否则,您可能需要更多地澄清您的问题。