プログラミングお題に挑んでみた:リストの内容比較
お題:リストの内容比較 - No Programming, No Life への挑戦。色々考えていたら収集がつかなくなってきたので、シンプルに解くことにしました。ただ、何のアイデアもなくするのはつまらないので、かなり前に「Groovyなら1行でかけるサンプル集」みたいなのがあったのを思い出し、1行で書くことにしました。
1行といっても、リスト作成から出力を1行のみです(セミコロンで区切れば1行でかけなくもないけど、読みづらいので分けました)。なので、次のように並んでます。
- リストAの要素
- リストBの要素
- リストAとBの共通(論理積)の要素
- リストAとBの比較(余裕のある方用のお題)
1行表記のため、次の点は簡略化させてもらいました。
- リストは予めListオブジェクトに変換する
- リストAとBの比較の書式にはタブ文字を利用する(入力した文字によっては文字欄の幅がずれる)
そのほかの見苦しい記述は私の実力不足です・・・
今回やってておもしろかったのは、print文中に${}と記述することで内部に処理を埋め込めること。ちょっとしたことならこれがシンプルでいいですね。埋め込む値がたくさんあるときはprintfが便利ですが。
もう一点は、括弧の省略可否です。たとえば、
(lList+rList).toSet().sort().each { ... }
という記述をするとエラーになるので、上記コードのように書く必要があります。クロージャだからでしょうか。new List().sort()などといった括弧の省略記述が出来るので、とことん省略していこうと思っていたら、この件に遭遇してしまいました。注意が必要です。