Help us understand the problem. What is going on with this article?

第11章:ScalaのSeqリファレンス

More than 5 years have passed since last update.

今回はSeqについて、リファレンスなノリで紹介するよ。

入門編としてこちらも読んでね(^^)v
第8章:Scalaのコレクション(Seq, Set, Map)入門

scala.collection.immutable.Seq

要素の順序を意識する必要がある場合に、使う箱だ。
JavaのListと役割は似ているね。
ただ色んなことができるんだ。
しかも前回の 第10章:ScalaのTraversableリファレンスで紹介したメソッドも使えるんだ。
前回のソースのほとんどがSeqだったことに気付いたかな?

添字参照

(i)

添字の要素を返す

scala> Seq(1, 2, 3)(2)
res0: Int = 3

isDefinedAt

指定した値が、添字の範囲に存在するか判定する

scala> Seq(1, 2, 3) isDefinedAt (3)
res1: Boolean = false

scala> Seq(1, 2, 3) isDefinedAt (2)
res2: Boolean = true

長さ

length

要素の数を返す

scala> Seq(1, 2, 3) length
res3: Int = 3

lengthCompare

要素数が指定した値と比較し以下を返す
- 少ない場合は1
- 同じ場合は0
- 多い場合は1

scala> Seq(1, 2, 3) lengthCompare (2)
res4: Int = 1

scala> Seq(1, 2, 3) lengthCompare(3)
res5: Int = 0

scala> Seq(1, 2, 3) lengthCompare (4)
res6: Int = -1

indices

添字の範囲を返す

scala> Seq(1, 2, 3) indices
res7: scala.collection.immutable.Range = Range(0, 1, 2)

検索

indexOf

指定した値と等しい最初の要素の添字を返す

scala> Seq(1, 2, 3, 2) indexOf (2)
res8: Int = 1

scala> Seq(1, 2, 3, 2) indexOf (4)
res9: Int = -1

lastIndexOf

指定した値と等しい最後の要素の添字を返す

scala> Seq(1, 2, 3, 2) lastIndexOf (2)
res10: Int = 3

indexOfSlince

指定したシーケンスと等しい最初の要素の添字を返す

scala> Seq(1, 2, 3, 2, 3) indexOfSlice Seq(2, 3)
res11: Int = 1

scala> Seq(1, 2, 3, 2, 3) indexOfSlice Seq(2, 2)
res12: Int = -1

lastIndexOfSlice

指定したシーケンスと等しい最後の要素の添字を返す

scala> Seq(1, 2, 3, 2, 3) lastIndexOfSlice Seq(2, 3)
res13: Int = 3

indexWhere

関数を満たす最初の要素の添字を返す

scala> Seq(1, 2, 3, 2, 3) indexWhere (_ == 2)
res14: Int = 1

prefixLength

関数を満たさない最初の要素の添字を返す

scala> Seq(1, 2, 3, 2) prefixLength (_ != 3)
res15: Int = 2

加算・追加

+:

指定した要素をSeqの先頭に追加した新しいSeqを返す

scala> 4 +: Seq(1, 2, 3)
res16: Seq[Int] = List(4, 1, 2, 3)

:+

指定した要素をSeqの末尾に追加した新しいSeqを返す

scala> Seq(1, 2, 3) :+ 4
res17: Seq[Int] = List(1, 2, 3, 4)

padTo

指定した長さになるまで、指定した要素をパディングする

scala> Seq(1, 2, 3) padTo (10, 4)
res18: Seq[Int] = List(1, 2, 3, 4, 4, 4, 4, 4, 4, 4)

更新

patch

指定した添字から指定した要素数を、指定したSeqで置き換えた新しいSeqを返す

scala> Seq(1, 2, 3) patch (1, Seq(4, 5, 6), 2)
res19: Seq[Int] = List(1, 4, 5, 6)

updated

指定した添字の要素を、指定した要素で置き換えた新しいSeqを返す

scala> Seq(1, 2, 3) updated (2, 4)
res20: Seq[Int] = List(1, 2, 4)

ソート

sorted

要素をソートした新しいSeqを返す

scala> Seq(4, 1, 5, 2, 3, 7, 8) sorted
res21: Seq[Int] = List(1, 2, 3, 4, 5, 7, 8)

逆順

reverse

要素を逆順にした新しいSeqを返す

scala> Seq(1, 2, 3) reverse
res22: Seq[Int] = List(3, 2, 1)

比較

startsWith

指定されたSeqで始まっているか判定する

scala> Seq(1, 2, 3) startsWith Seq(1, 2)
res23: Boolean = true

scala> Seq(1, 2, 3) startsWith Seq(2, 3)
res24: Boolean = false

endsWith

指定されたSeqで終わっているか判定する

scala> Seq(1, 2, 3) endsWith Seq(2, 3)
res25: Boolean = true

scala> Seq(1, 2, 3) endsWith Seq(1, 2)
res26: Boolean = false

contains

指定した要素を含んでいるか判定する

scala> Seq(1, 2, 3) contains (3)
res27: Boolean = true

scala> Seq(1, 2, 3) contains (4)
res28: Boolean = false

containsSlice

指定したSeqを含んでいるか判定する

scala> Seq(1, 2, 3, 4, 5) containsSlice Seq(3, 4)
res29: Boolean = true

scala> Seq(1, 2, 3, 4, 5) containsSlice Seq(4, 4)
res30: Boolean = false

集合間演算

intersect

積集合を返す

scala> Seq(1, 2, 3) intersect Seq(2, 3, 4, 5, 6)
res28: Seq[Int] = List(2, 3)

diff

差集合を返す

scala> Seq(2, 3, 4, 5, 6) diff Seq(1, 2, 3)
res30: Seq[Int] = List(4, 5, 6)

union

和集合を返す

scala> Seq(2, 3, 4, 5, 6) union Seq(1, 2, 3)
res31: Seq[Int] = List(2, 3, 4, 5, 6, 1, 2, 3)

distinct

重複要素を取り除いた新しいSeqを返す

scala> Seq(2, 3, 4, 5, 6, 2, 3) distinct
res32: Seq[Int] = List(2, 3, 4, 5, 6)

まとめ

今回は、 コレクションのSeqトレイトのメソッドについて語ってみたけどどうだった?
前回と同じで、やっぱりこの辺は体を動かさないとわからないね。
どのような場面で使うかを想像しながら、ソースを書いて動かしてみてね。

今回も
体で感じてくれたかな?

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away