Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
54
Help us understand the problem. What is going on with this article?
@f81@github

第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トレイトのメソッドについて語ってみたけどどうだった?
前回と同じで、やっぱりこの辺は体を動かさないとわからないね。
どのような場面で使うかを想像しながら、ソースを書いて動かしてみてね。

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

54
Help us understand the problem. What is going on with this article?
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
f81@github
Fringe81のエンジニアが頑張って執筆ちゅうです! Scala の修行を始めました。 みなさま、温かい目で見守ってください。
fringe81
Fringeは、最新のテクノロジーとプロフェッショナルによるサービスにより、社会課題に仮説を立てて市場に広げていくことで、数十年という長期的なスパンで価値を生み出し続け、より良い世界を創る集団です。 既存の領域に限らず、時流を読み、仮説を生み出し、テクノロジーの力で優れたサービスを生み出し続けます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
54
Help us understand the problem. What is going on with this article?