Ruby 逆引きレシピ レシピ032-040
Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
- 作者: 島田浩二,設樂洋爾,村田賢太,前田智樹,谷口文威
- 出版社/メーカー: 翔泳社
- 発売日: 2009/07/25
- メディア: 単行本(ソフトカバー)
- 購入: 16人 クリック: 349回
- この商品を含むブログ (77件) を見る
今日はレシピ 032 から 040 までを読みました。
Array と Hash、Struct (コレクション/データ構造)のところです。Enumerable のメソッドはよく使うところなのでするすると読み進めましたけど、意外と知らないメソッドもありました。
レシピ 032 より、Array#fill で全要素を指定した値で埋める。地味ですが知らなかったかも。
a = [0,1,2,3,4] a.fill(5) # => [5,5,5,5,5]
レシピ 036 より、Enumerable#partition でブロックで判定した条件の真偽で配列やハッシュ(Enumerable を include したクラスならなんでも)を2つのグループに分けることができます。初めて知りました。これは今後使えることがありそうです。Hash は分類結果がキーと値のペアの配列になります。
a = 0..10 a.partition{|i| i %2 == 0 } #=> [[0, 2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
レシピ 040 より、Gems パッケージの lazylist をインストールすると遅延リストが使えるようになります。LazyList.from(first) で最初の要素を指定して生成、次の要素は succ メソッドで作ることになっています。LazyList#take で先頭から特定の数の要素を取得したり、LazyList#[] で特定のインデックスの要素を取り出したりできます。実際に要素を取得しようとした時になって succ で値を作ります。
require "lazylist" ll = LazyList.from(0) ll.take 5 #=> [0,1,2,3,4]
ちょっと中身をみてみたところ、Enumerator を使って実装されているみたいでした。メモ化もされてるみたいでした。実装を読んでみるとおもしろいかもしれません。
今日で 2章までが終わりました。