はじめに
Rangeとは
ざっくりいえば、開始値から終了値までの連続したデータを表現するデータです。「10から20までの連続したデータを作りたい」「1から100まで2刻みのデータを作りたい」という時に、簡単にデータを生成することができます。
やりたかったこと
RangeをListに変換したかった。
背景
適当な数値の引数を終端とした連続データをListで返す、というとあるプログラミングの問題を解いていたとき「Rangeを使えばいいや」まで思いついて、あとは変換するだけ。ってところで少しつまづいてしまいました。
ちゃんとリファレンス読んだら、しっかり用意されていたので次の項でサンプルコードと合わせて記載します。
解決方法
それぞれ以下のプロパティを使うことで、リストおよび配列に変更できます。
- Range.toList // リストに変換
- Range.toArray // 配列に変換
どちらもメソッドではない点に注意しましょう。
プログラミングテストで腕試しできる【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 = Lis...
リファレンス
Range
Paiza.io (サンプルコード作成)
ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
paiza.IOはオンラインですぐにプログラミングが始められる、オンライン実行環境です。Java,Ruby,Python,PHP,Perlなど主要32言語に対応。プログラミング学習にも。
コメント