12

私は4つの要素を持っています:(List[List[Object]]オブジェクトは各要素で異なります)私が持つことができるように圧縮したいList[List[obj1],List[obj2],List[obj3],List[obj4]]

私はそれらを圧縮しようとしましたが、ネストされたリストを取得しましたが、それは次のように述べているため、フラット化を適用できません:パラメータータイプに一致する暗黙の引数はありません。

どうすればこれを解決できますか? 別の方法を試す必要がありますか、それともフラット化を機能させる方法はありますか?

私はscalaにちょっと慣れていないので、ばかげた質問かもしれません:D よろしくお願いします! クラウ

4

7 に答える 7

23

1 つの入れ子になったリストの場合: は次のflattenことを行います。

scala> List(List(1), List(2), List(3)).flatten
res4: List[Int] = List(1, 2, 3)

scala> List(List(List(1)), List(List(2)), List(List(3))).flatten
res5: List[List[Int]] = List(List(1), List(2), List(3))

複数のネストされたリストの場合、次のことができます。

def flatten(ls: List[Any]): List[Any] = ls flatMap {
  case i: List[_] => flatten(i)
  case e => List(e)
}

val k = List(1, List(2, 3), List(List(List(List(4)), List(5)), List(6, 7)), 8)
flatten(k)

印刷しますList[Any] = List(1, 2, 3, 4, 5, 6, 7, 8)

于 2013-04-16T18:23:46.393 に答える
4

質問は非常に曖昧です。説明しようとするのではなく、持っているものをそのまま貼り付ける必要があります。それは、すべての人 (あなたを含む) の生活をずっと楽にしてくれます。

以下のコードは、あなたが持っているものを想定した一例です。

scala> List(List(1))
res0: List[List[Int]] = List(List(1))

scala> List(List(2))
res1: List[List[Int]] = List(List(2))

scala> List(List(3))
res2: List[List[Int]] = List(List(3))

scala> List(List(4))
res3: List[List[Int]] = List(List(4))

scala> res0 ::: res1 ::: res2 ::: res3
res4: List[List[Int]] = List(List(1), List(2), List(3), List(4))
于 2009-11-15T23:17:26.993 に答える
2

scala 2.10.2 で

scala> val foo = List(List(1), List("a"), List(2.3))
foo: List[List[Any]] = List(List(1), List(a), List(2.3))

scala> foo.flatten
res0: List[Any] = List(1, 2, a, 2.3)

正常に動作しますが、

あなたがのように走るなら

scala>  val foo = List(List(1,2), 2, List(2.3))
foo: List[Any] = List(List(1, 2), 2, List(2.3))

scala> foo.flatten
<console>:9: error: No implicit view available from Any => scala.collection.GenTraversableOnce[B].
              foo.flatten

そのために私は関数を書く

scala> def flat(ls: List[Any]): List[Any]= ls flatten {
     |   case t: List[Any] =>  flat(t)
     |   case c => List(c)
     | }   
flat: (ls: List[Any])List[Any]

scala> flat(List(List(1,2),2,List(2.3)))
res2: List[Any] = List(1, 2, 2, 2.3)
于 2013-10-14T09:16:30.293 に答える
0

たとえばList.concat

List.concat(List(1), List(2,22), List(3))    // delivers List(1, 2, 22, 3)
于 2016-08-12T05:51:33.707 に答える