入れ子配列

前回の記事を書いてて{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] ]が作れます。

以上