2016-08-26 5 views
2

List[List[Any]]とすれば、どのように各サブリストのn番目の要素を含むList[Any]に減らすことができますか? 例を挙げて説明しましょう。リストのサブリストからn番目の要素を抽出し、それらを新しいリストに結合しますか?

List(44,55) 

がItheがreduceを使用すべきか、私はflattenか何かでmapを結合する必要があります私は得るためにList(1,2,3,44)List(2,3,4,55)から4番目の要素を抽出したい

List(List(1,2,3,44),List(2,3,4,55)) 

:これは最初のリストです?ヒントは非常に便利です。

答えて

2

定義されていないリスト位置がNoneにマッピングされ、位置がSome(listValue)に定義されている部分関数に各サブリストを持ち上げ、012を使用します、リスト上

xs.flatMap(_.lift(3)) 
res1: List[Int] = List(44, 55) 

xs.flatMap(_.lift(4)) 
res2: List[Int] = List() 
+0

結果リストの1つに常に1つの要素が含まれている場合。リスト(1)、それを単一の値に安全に減らす方法は? 'xs.flatMap(_。lift(4)).head(0)'は安全ではないと思います。 – Lobsterrrr

+0

'headOption'を使用してください。 'xs.flatMap(_。lift(4)).headOption'は' None'を返します。 – elm

0

何を試しましたか?

val ll = List(List(1,2,3,44),List(2,3,4,55)) 
ll.map(_.apply(3)) 

のようなものだけで動作します。

単一要素を抽出する限り、結果は既に平坦化されています。

あなたが行うことができます
+0

を平坦化する私は最初のサブリストを取り、または '' ll.map ll.get.head(3) 'のような多くの異なる組み合わせを試してみました。(_._ 4) '私は 'apply'関数について知りませんでした。 – Lobsterrrr

+0

'list.apply(n)' == 'list(n)' == 'n番目の要素を返すか、java.lang.IndexOutOfBoundsException'をスローします。 'list.lift(n)'を使って結果として 'Option'を取得し、例外を避けることもできます。 – dveim

+0

リフトの使用はより安全な解決策であるようです。ありがとう。 – Lobsterrrr

0

list.map(_(3)) 

が、これは非常に安全ではありません:あなたのサブリストに十分な要素を持っていない場合、あなたははIndexOutOfBoundsException

を得るでしょう

より安全な解決策は以下のとおりです。

list.flatten(_.lift(3)) 
+0

これは任意の数のサブリストで動作しますか? – Lobsterrrr

関連する問題