【Scala】Rangeを配列やリストに変換する

Scala

はじめに

Rangeとは

ざっくりいえば、開始値から終了値までの連続したデータを表現するデータです。「10から20までの連続したデータを作りたい」「1から100まで2刻みのデータを作りたい」という時に、簡単にデータを生成することができます。

やりたかったこと

RangeをListに変換したかった。

背景

適当な数値の引数を終端とした連続データをListで返す、というとあるプログラミングの問題を解いていたとき「Rangeを使えばいいや」まで思いついて、あとは変換するだけ。ってところで少しつまづいてしまいました。

ちゃんとリファレンス読んだら、しっかり用意されていたので次の項でサンプルコードと合わせて記載します。

解決方法

それぞれ以下のプロパティを使うことで、リストおよび配列に変更できます。

どちらもメソッドではない点に注意しましょう。

プログラミングテストで腕試しできる【paiza】

サンプルコード

object Main extends App {
    val r = Range(1, 5)     // (1 until 5)
    
    println(r)                         // Rangeとして出力
    println(r.toList)                  // Listとして出力
    println(r.toArray)                 // Arrayとして出力(アドレス出力)
    r.toArray.foreach(x => println(x)) // Arrayの各要素を出力
}

Range(from, to)を指定すると、from ~ (to – 1)までの要素を持つRangeオブジェクトが生成されます。(このサンプルコードの場合、1 ~ 4)

実行結果

Range 1 until 5
List(1, 2, 3, 4)
[I@13a57a3b
1
2
3
4

それぞれのクラスと値が出力されます。Arrayはアドレスが出てしまうので、各要素も出力しました。

最後に

比較的よく使うような変換処理なので、言語仕様で用意されているのはありがたいですね。最初はJavaのIntStreamみたいなの無いかと思って調べたのですが、、、

参考

How to convert Range to List or Array in Scala (stackoverflow)

How to convert Range to List or Array in Scala
I want to convert a range of Int into a a List or an Array. I have this code working in Scala 2.8: var years: List = List() val firstYear = 1990 val lastYear = ...

リファレンス

Range

Paiza.io (サンプルコード作成)

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
paiza.IOはオンラインですぐにプログラミングが始められる、オンライン実行環境です。Java,Ruby,Python,PHP,Perlなど主要32言語に対応。プログラミング学習にも。

コメント

タイトルとURLをコピーしました