前回の記事を書いてて{2 => 3, 3 = 1}を[ [2, 3], [3, 1] ]と変換したり、逆変換したりしたいと思いました。入れ子の配列をフラットな配列にする方法はflattenというメソッドがあって、[ [2, 3], [3, 1] ].flattenとすると[ 2, 3, 3, 1 ]になったと思う。これでは目的とは違うけどプログラムの途中で使えると思う。とりあえずテストということで、いま枠組みをかいたところ。仕事が来たので仕事に戻ります。
def test_nestarray2hash(nestarray) end def test_hash2nestarray(hash) end
追記:
むむう、簡単すぎるなぁ。flattenを使わなくても簡単。思い通り簡単だったら、この記事これで終了。
追記:書いたテストは下記のとおり
def test_nestarray2hash assert_equal({}, nestarray2hash([])) assert_equal({2 => 3, 3 => 0}, nestarray2hash([[2, 3], [3, 0]])) assert_equal({2 => 3, 3 => 1}, nestarray2hash([[2, 3], [3, 1]])) end def test_hash2nestarray assert_equal([], hash2nestarray({})) assert_equal([[2, 3], [3, 0]], hash2nestarray({2 => 3, 3 => 0})) assert_equal([[2, 3], [3, 1]], hash2nestarray({2 => 3, 3 => 1})) end
プログラムは下記のとおり
def nestarray2hash(nestarray) hash = {} nestarray.each { |pair| hash[pair[0]] = pair[1] } return hash end def hash2nestarray(hash) ary = [] hash.each { |key, item| ary.push([key, item]) } return ary end
ふむ。不思議だ。この感覚は、つまりいままでだとたとえば英語や中国語を覚えるように繰り返しからだに叩き込んでプログラムが出来るようになるのに、この「テストドリブン」だとプログラム言語は二の次で、「たぶんこれでいけるだろう」とか「これでいければOK。いけなければ直そう」という程度のレベルで、目的が達成されてしまう。
追記:Hash[*[ [1,2],[3,4] ].flatten]でHashが作成されることを発見。逆に{1=>2, 3=>4}.to_aで[ [1,2],[3,4] ]が作れます。
以上