40

同じ数のアイテムを持つ aList[Message]と aがあり、各インデックスでが からのList[Author]ものになるように並べ替える必要があります。MessageAuthor

また、ここで呼び出すクラスもありSmartMessage、コンストラクターは aMessageと対応するAuthor.

私がやりたいことはList[SmartMessage]、2 つの単純なリストのデータを組み合わせて を作成することです。

追加の質問: ListScala で挿入順序を保持しますか? List[Message]List[Author]を同じ順序で作成するようにします。

4

1 に答える 1

83

使用できますzip

val ms: List[Message] = ???
val as: List[Author] = ???

var sms = for ( (m, a) <- (ms zip as)) yield new SmartMessage(m, a)

気に入らない場合は、for-comprehensions次を使用できますmap

var sms = (ms zip as).map{ case (m, a) => new SmartMessage(m, a)}

メソッドzipは、ペアのコレクションを作成します。この場合List[(Message, Author)]

zippedメソッド on Tuple2(および on Tuple3)を使用することもできます。

var sms = (ms, as).zipped.map{ (m, a) => new SmartMessage(m, a)}

ご覧のとおりmap、この場合はパターン マッチングは必要ありません。

追加

ListでありSeqSeq秩序を維持します。scala コレクションの概要を参照してください。

コレクションには、 SeqSetMapの 3 つの主要なブランチがあります。

  • Seqは要素の順序を保持します。
  • セットには重複する要素が含まれていません。
  • Mapには、キーから値へのマッピングが含まれます。

Listin scala is linked listであるため、要素を追加するのではなく、先頭に追加する必要があります。scala コレクションのパフォーマンス特性を参照してください。

于 2013-06-19T19:21:13.300 に答える