私はList[Message]
およびList[Author]
は同じ数のアイテムを持ち、各インデックスでMessage
がAuthor
からのものになるように順序付けする必要があります。
また、ここでSmartMessage
と呼ぶクラスもあり、コンストラクターは2つの引数を取ります:Message
と対応するAuthor
。
私がやりたいことは、List[SmartMessage]
、2つの単純なリストのデータを組み合わせます。
追加の質問:List
はScalaで挿入順序を保持しますか? List[Message]
およびList[Author]
同じ順序で。
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)]
。
_Tuple2
_(および_Tuple3
_)でzipped
メソッドを使用することもできます。
_var sms = (ms, as).zipped.map{ (m, a) => new SmartMessage(m, a)}
_
ご覧のとおり、この場合はmap
のパターンマッチングは不要です。
追加
List
はSeq
であり、Seq
は順序を保持します。 scala collections overview を参照してください。
コレクションには3つの主要なブランチがあります: Seq 、 Set 、および Map 。
List
in scalaは リンクリスト なので、追加するのではなく、要素を追加する必要があります。 パフォーマンス特性 を参照してくださいscalaコレクション。