From: GOTO Kentaro Date: 2007-08-22T08:32:56+09:00 Subject: [ruby-list:43919] Re: Hashへの生成順は保障されないのか? ずぼらな質問に答えてくれて中田さんどうもありがとうです。 07/08/22 に Nobuyoshi Nakada さんは書きました: > > * 格納された順序を覚えられる > > * keys.sort_by(&ord).each do |k| ... end の ord 相当を指定できる > > という二通りを必要とすることが多いんですが、両方サポートしているんでしょうか。 > > 前者のみです。 なるほど。 大クラス主義的にはずいぶんと貧弱な気がしました。 でもまあ、例外を起こさないように任意の順序を指定するのは 手軽ではなかったりもしますね。 ちなみに僕が順序をほしがるときはたいてい文字列処理の一環で、 それも多くはファイルの読み書きの場合です。たとえば、to_yaml の順序が 気になるようなばあいとかですね。あるいはXMLの属性みたいなのの 出現順序を覚えておきたいときとか。to_yaml だったら Hash#each を 書き換えて keys.sort_by 順で実行するようにしちゃうし、 出現順記録の場合は、格納順を覚える配列を持たせてます。 文字列以外の場合をあさってみると、ノードにラベルが ついた木を作るときなんかも Hash のネストで代用したりしますが、 そういうときに必要な順序の定義はアプリケーション依存ですね。 ごとけん # 連想配列と聞くと AWK を思い出します