質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Q&A

解決済

2回答

23333閲覧

ScalaでListに要素を追加するベストな方法

pengin01

総合スコア11

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

1グッド

1クリップ

投稿2015/03/10 14:14

ScalaでListに要素を追加する場合、一般的な方法が知りたいです。

取り敢えず下記のようにしています。

lang

1var lst = List[String]() 2lst = lst :+ "aaa" 3lst = lst :+ "bbb" 4print(lst) 5 6List(aaa, bbb)
yuji38kwmt👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Scalaでは可変(mutable)の変数やコレクションを使わないスタイルが推奨されています。

が、この例ではそれを上手く説明できませんので、そのままのを少しだけ簡素にするなら、

lang

1var lst = List[String]() 2lst :+= "aaa" 3lst :+= "bbb" 4print(lst) // => List(aaa, bbb)

と書けます。

Javaのリスト(ArrayList)に当たるコレクションはArrayBufferですので、これを使ってListにする方法もあります。

lang

1import scala.collection.mutable.ArrayBuffer 2val a = new ArrayBuffer[String] 3a += "aaa" 4a += "bbb" 5val lst = a.toList 6print(lst) // => List(aaa, bbb)

投稿2015/03/10 14:34

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Scalaをはじめとする関数型プログラミングでは、List(コレクション)に要素を追加する必要がある場合、そのロジックがおかしいのではないかと疑ってください。
コレクションは基本的にImmutable(不変)であるべきです。

また、Listへの要素の追加を表現する場合は、:+は使わず、::(cons)を使うのが一般的です。

val lst = "aaa" :: "bbb" :: Nil println(lst) // => List(aaa, bbb)

List同士を連結する必要がある場合は、:::演算子を使います。

val lst0 = "aaa" :: "bbb" :: Nil val lst1 = "ccc" :: "ddd" :: Nil println(lst0 ::: lst1) // => List(aaa, bbb, ccc, ddd)

Scalaのパターンマッチでは、この::を用いてListに型をマッチさせることもできますし、再帰的な表現でも非常に便利です。

たとえば、Listを受取って、そのListが空で無ければ先頭の要素を、空の場合はNoneを返す、headOptionという関数をパターンマッチを使って無理やり実装すると、次のようになります。

def headOption(ls: List[Any]): Option[Any] = ls match { case Nil => None case head :: tail => Some(head) } val lst0 = List("aaa", "bbb", "ccc", "ddd") println(headOption(lst0)) // => Some(aaa) val lst1 = List() println(headOption(lst1)) // => None

投稿2015/07/17 11:12

oteratail

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問