List(リスト)の連結

List(リスト)の連結

[修正]
id:kmizushimaさんの指摘をもらって修正

先頭に追加

var a = List(1,2,3)
a = 4::a
println(a)
-> List(4, 1, 2, 3)

末尾に追加

Listを生成する方法(こっちはWarning発生しないので、こちらを使うことにする)
var a = List(1,2,3)
a =  a ::: List(4)
println(a)
-> List(1, 2, 3, 4)
Listを生成しない方法
var a = List(1,2,3)
a = a + 4

※Warning [method + in class List is deprecated] と警告されるが、正常に動くみたい

スポンサーリンク
レクタングル(大)
レクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル(大)

コメント

  1. kmizushima より:

    var a = List(1,2,3)
    a = List(4) :: a

    だと型エラーになるので、

    var a = List(1,2,3)
    a = 4::a

    だと思います。また、リストの末尾に要素を追加
    する場合、

    var a = List(1,2,3)
    a = a + 4

    の方が(無駄なリストを生成しないで良い分)良い
    かと思います。

  2. shohu33 より:

    コメントありがとうございます!
    先頭追加の方は、ご指摘とおりですね。
    末尾追加の方は、List生成しない方が確かに良いので、そちらを今後使おうと思います。
    ただ、
    method + in class List is deprecated
    とWarningが(Scala pluginより)発生するようですね。
    値は正常に格納できるようです。

  3. kmizushima より:

    > method + in class List is deprecated
    > とWarningが(Scala pluginより)発生するようですね。

    失礼しました。これに関して、本家のScala MLでも色々議論があった末、deprecatedになっていたようです。理由については正直ちょっと納得が行かない部分もあるのですが、ともあれ、deprecatedになっているAPIを使うのはあまりよろしく無いことだとは思うので、+をお勧めしたのは間違いでした。元の、:::を使って連結する方法を使うのがよろしいかと思います。

  4. shohu33 より:

    なるほど〜、個人的には + の方がすっきりかけて良いとおもったんですけどね。
    ::: を使うようにします。

  5. uchinari より:

    deprecated というのは、たぶん、リストは末尾に要素追加すると遅いからだと思います。
    (先頭なら高速)
    listの最後を探さないといけないからでしょうか(?)

    まあ、なるべく末尾追加は使わないほうがいいみたいです。
    ご参考まで。