Aruyo

Rubyを触ってみる 5限目

map / collect はちょっと面白かったかな。 記法がまだ馴染めないけど、まあ、そのうちに。 pp の事はそのまま置いといておこう。

eachとの使い分けがまだはっきりしてこないけど、とりあえず配列がこんな簡単に生成できるはわかった...んで、次のスライドにいってみる。 どうやら、九九の計算と表の作成と値の埋め込とロジックで区分けしようってことみたい。


N = 9
kuku = (1..N).map{|i| (1..N).map{|j| i * j}}
e_kuku = kuku.flatten.to_enum

line = "+---" * N + "+\n"
table = '' + line

N.times{
	N.times{table << "|" + "  #{e_kuku.next}"[-3..-1]}
	table << "|\n" + line
}

print table

またなんか新しいのが増えたぞ。

flatten は名前の通りフラット。
二次元配列を平坦にならしちゃうみたいで。


kuku = (1..9).map{|i| (1..9).map{|j| i * j}}
p kuku.flatten

これだけで実行すると、こうなった。


$ ruby test_7.rb
[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]

to_enum は Enumerator というものらしい。 next する都度、配列の次のポインタに進めるみたい ... これってクラス内配列をコールする都度すすめてんのと同じ感覚 ? ピンとこないけど。

<< は文字列や配列を追加する演算子みたい。
シンプルだなあ。

PHP だと .= したり array_merge や $array[]= したりすんのと似てるかな。結合演算子もあるけど $array1 + $array2 するのはまた違うし、継承とかちょっと難しいよね。

とりあえず、最初のコードは ...

九九の二次元配列をつくって
フラットにならべて
横罫線を作って
テーブルに天井つけて
9列ぶん配列から数値を取り出して
縦罫付きで並べ書き足して
横罫線を書き足して
9行並べるまで5から繰り返し

流れは分かった。 rubyだとシンプルに書けるのも分かった。

ループの種類がよくわかんないかなあ。 for と each に collect に times と。 スライドにはなかったけど while あるだろうなあ。 each と times はメソッドだし。 collect は配列専用っぽいし。 for と while は構文か。 使い分が大事になりそうだ ... 。