講師の方が勉強会で使用したスライドは以下の二つです。
途中で下のような課題が出ました。
”Scalaで引数をソートして標準出力するバッチを書いてみよう”こいつがなかなか深くて
僕は以下のコードを書きました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main { | |
def main(args: Array[String]) : Unit = { | |
args.toList.sortWith(_<_).foreach(println) | |
} | |
} |
こいつでaa bbとかをソートすると問題ないのですが、数字だけを引数に取ってそいつをソートする場合に問題になります。
例えば引数に10 2と入れると
10と出力されます。
2
文字列をソートするという意味では間違ってないのですが、数値のみを入力した場合は数値の大小でソートされることを期待すると思います。
なので、途中から引数に含まれる整数のみを抽出してソートするという課題に変わりました(会場の雰囲気が)。
僕は時間内にいい方法を思いつかなかったのですが、帰ってからいろいろ考えた結果、以下のコードを思いつきました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main { | |
def main(args: Array[String]) : Unit = { | |
args.filter(_ matches "^[0-9-][0-9]*").map(_.toInt).sortWith(_<_).foreach(println) | |
} | |
} |
正規表現で数値のみを抜き出してIntにキャストして出力しています。
-記号にも対応しています。+記号をつけると例外が発生するので無視することにしました。
残りの時間はPlay Framework2でした。
チュートリアルをガリゴリやってたところでタイムアップでした。
ソートの課題はいろいろ深くて面白かったです。
最近少しリスト構造に対して処理をするって感覚がわかってきた気がします。
とは言ってもまだまだ分からない事だらけなので、早く色んな処理をサクッと一行で書けるようになりたいです。
0 件のコメント:
コメントを投稿