3

format のペアのリストがあり、リスト(a: A, x: Int)xで重複していません。x特定の範囲内にあることがわかったので0 until n、サイズの配列を作成したいと思います。nそのi要素はタイプOption[A]です。(a, i)元のリストにペアがある場合、それは でありSome(a)、そうでない場合はNoneです。簡単な例:

Original List (n = 6):
(a1, 1)
(a2, 2)
(a3, 5)
Desired Output:
(0, None)
(1, Some(a1))
(2, Some(a2))
(3, None)
(4, None)
(5, Some(a3))

確かに、変更可能な配列を取得し、元のリストを調べて、対応する要素を埋めることができます。しかし、時間の複雑さが に超線形であってはならないことを考えるとn、それを行うfpスタイルの方法は何ですか? 簡単な質問かもしれませんが、どうしても理解できません...誰かが助けてくれることを願っています。ありがとう!

4

1 に答える 1

3

大規模なコレクションと多くの/大きなギャップがある場合、これはメモリを浪費します。Map[Int,B]代わりに a を使用しget、 を返す操作を使用することをお勧めしますOption[B]。スワップは次のように実行できます。

scala> List("a1"->1, "a2"->2, "a3"->5)
res3: List[(java.lang.String, Int)] = List((a1,1), (a2,2), (a3,5))

// swap the elements and create a Map
scala> res3.map(_.swap).toMap
res4: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> a1, 2 -> a2, 5 -> a3)

scala> res3.map(_.swap).toMap.get(3)
res5: Option[java.lang.String] = None

scala> res3.map(_.swap).toMap.get(1)
res6: Option[java.lang.String] = Some(a1)
于 2013-01-08T18:26:45.890 に答える