1

私は配列を持っています:(Array[[List[Int]]](81)これはvalです)

行ごとに分解したいのですが、その特定の行の要素のいずれかにリスト内の要素が1つしかない場合、たとえばb.size= 1の場合は、'b'のその要素を他のすべてのリストから削除します。配列の特定の行。

可変変数を使用しないという制約がある場合、配列の最初の9つの要素、次に次の9つの要素だけを検討する方法がわかりません。(したがって、varsではなくvalsのみ)。

これまでのところ、リストとリストから削除する要素を受け入れる関数があります。しかし、上記の配列のすべての行または配列のすべての列を繰り返し処理し、要素が1つしかないリストが見つかった場合は、行の先頭に戻って、リスト内の他の要素を更新するにはどうすればよいですか。 、私の質問です。

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 に答える