• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ハッシュのハッシュのソート)

Rubyでハッシュのハッシュのソート方法を知りたい!

koko_u_uの回答

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.3

そもそも Hash について、そのキーの登場順は考えるべきではないと思います。 ソートした結果は配列として得るようにインターフェースを考え直したほうがよいかと。 つまり、利用者が {"user1"=>{"a"=>10, "b"=>20, "c"=>30"}, "user3"=>{"f"=>10, "g"=>5, "h"=>10}, "user2"=>{"d"=>5, "e"=>8} } と {"user1"=>{"a"=>10, "b"=>20, "c"=>30"}, "user2"=>{"d"=>5, "e"=>8}, "user3"=>{"f"=>10, "g"=>5, "h"=>10} } を区別する必要が生ずるのは避けるべきだと思います。

lakings
質問者

お礼

ご指摘の通りです。自分でももっとよい設計があるのではないか?と思っています。 背景を補足します。 あるシステム内に、ユーザ名、案件、必要工数を含むテーブルが複数あり、それらは何かでソートされているわけではないのですが、一つずつすべてのテーブルを取り出すことができるようになっています。ここまでは既存のシステムなので変更できません。 このシステムからRubyで全テーブルを取り出しながら、最終的には、ユーザごとに抱えている案件の合計時間が多い順に表示させたい、というのがやりたいことです。 その前段として、テーブルを取り出し、ユーザ名ごとにハッシュを作っていこうと思ったのが例としてあげたハッシュになります。その後ソートしようとしたところで行き詰まり、質問させていただきました。

関連するQ&A

  • ハッシュのソート

    ハッシュに以下のようなデータが格納されている場合 valueでソートして表示するにはどうしたらよいでしょうか? 教えてください。 %hoge = (a => 10, b => 3, c => 7); 表示 a => 10 c => 7 b => 3

    • ベストアンサー
    • Perl
  • ハッシュのハッシュを値とキーでソートする方法

    %array = ( 'A' => {   'a' => 7,   'b' => 3,   'c' => 9,   'd' => 1, }, 'B' => {   'a' => 3,   'b' => 8,   'c' => 3, },); のようなハッシュがあったとして、値の降順、1つ目のキー昇順、2つ目のキー昇順でソートし、下のような形で出力したいのですが、どのようにすればよいのでしょうか。 A  c  9 B  b  8 A  a  7 A  b  3 B  a  3 B  c  3 A  d  1

    • ベストアンサー
    • Perl
  • 2次元ハッシュ または 2次元配列をソートしたい

    2次元ハッシュのソートをしたいです。 ハッシュは2つのキーを使用していて、 1つ目のキーは文字列、2つ目のキーは数字(0からの連番)です。 ハッシュの中身は文字列が入っています。 これを次のような表に見立てて、特定の列でソートしたいのです。 hash['a']['0'], hash['a']['1'], ..., hash['a']['50'], hash['q']['0'], hash['q']['1'], ..., hash['q']['50'], hash['c']['0'], hash['c']['1'], ..., hash['c']['50'], ... hash['d']['0'], hash['d']['1'], ..., hash['d']['50'], 例えば 6列目の値によってソートするということです。 以下のようにソートしようとしましたが、うまくいきません。 my @sorthash = sort { $a->[6] <=> $b->[6] } @hash; 何かヒントがあれば教えてください。

    • ベストアンサー
    • Perl
  • ハッシュ

    この問題の解き方を出来ればわかりやすくお願いします。 疑問:データと書いてある所に16進数の解答の答えを10進数に直していれるのでしょうか? 問題↓ 表A ーーーーーーーーーーーーーーーーー データと格納順 7B→B5→A7→58→FE→6A→7D→E9→88 ーーーーーーーーーーーーーーーーー ハッシュ値を f(データ)=mod(データ,8) で求めたとき最初に衝突が起こる。(上の表Aにあるデータと等しいハッシュ値になる)のはどのデータか。mod(a,b)はaをbで割った余りを表す。 a 6A b E9 c 7D d 88 (問題の解答はもとめておりません)

  • excel 7条件一括のソート方法

    excelの表を7条件 一度の操作でソートしたいです。 A      B     C    D    E     F     G     H       data1  data2 小計1   data3  data4  小計2   合計 Aさん   28    27     55    30    25     55    110 Dさん   29    26     55    30    25     55    110 Cさん   27    28     55    29    26    55     110 Bさん   28    28     56    27    27    54     110 上記のEXCELの表があった場合の ソート条件  1 H列の数が少ない順  2 1が同じ場合Gが少ない順  3  2が同じ場合Fが少ない順 4 3が同じ場合Eが少ない順 5 4が同じ場合Dが少ない順 6 5が同じ場合Cが少ない順 7 6が同じ場合Bが少ない順 となるように するには どうしたらよいでしょうか?    間違いをなくすために 数度のソートを繰り返すことはしたくありません。         よろしくお願いいたします  

  • 【javascript】ハッシュのキーをソートして取り出したい

    ハッシュのキーをソートして取り出したいです。 perlで表現すると、以下の様なかんじです。 foreach $key (sort keys %hash) { ... } そこで、prototype.jsを使って以下の様に書いてみました。 <html> <head> <script type="text/javascript" src="prototype.js"></script> </head> <body > <script > var table = {c:'C', b:'B', a:'A'}; $H(table).keys().sort().each(function(key){ alert(key + ' ' + table[key]); }); </script> </body> </html> 他に良い方法ありましたら、教えてください。

  • phpでのソートについて

    phpのソートについて教えてください。 以下のようなカンマ区切りのログファイルlog.txtがあるとしまして、 100,200,a,b,c, 300,100,d,e,f, 500,60,g,h,i, 50,300,j,k,l, 1000,60,m,n,o, このデータから 1番目のデータ(数値)が2番目のデータ(数値)より大きいデーターのみを対象にして ※つまりは以下のみ対象 300,100,d,e,f, 500,60,g,h,i, 1000,60,m,n,o, ここから1番目のデータ(数値)から2番目のデータ(数値)を引いた数が大きい順に ソートしてファイルに保存させたいのですが、 200,d,e,f,(300-100なので200) 440,g,h,i,(500-60なので440) 940,m,n,o,(1000-60なので940) ↓ ※最終的にこの順番で新しいログファイルnewlog.txtへ保存させたい 940,m,n,o, 440,g,h,i, 200,d,e,f, これらの処理を効率よく1度で行う方法はございますでしょうか。 わかりにくい説明で申し訳ありません。 お忙しい中恐縮ですがご教授いただけましたら幸いです。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 配列のソートについて質問です。

    配列のソートについて質問です。 2つのキーで配列の中身をソートしたいのですが、スマートな書き方があれば教えてください。 そもそも間違っている、などのご指摘でもありがたいです。 @t1 = map {(split /,/)[1]} @data; @t2 = map {(split /,/)[2]} @data; @data = @data[sort {$t1[$a] <=> $t1[$b] or $t2[$a] <=> $t2[$b]} 0 .. $#t1]; @dataの内容 A,1,2 B,1,3 C,2,1 D,3,2 E,3,1 F,1,1 出力結果 F,1,1 A,1,2 B,1,3 C,2,1 E,3,1 D,3,2 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 次のように表される対称行列の名前は?

    以下のように表される対称行列に固有の名前はありますでしょうか? 2次の場合 | a b | | b a | 4次の場合 | a b c d | | b a d c | | c d a b | | d c b a | 8次の場合 | a b c d e f g h | | b a d c f e h g | | c d a b g h e f | | d c b a h g f e | | e f g h a b c d | | f e h g b a d c | | g h e f c d a b | | h g f e d c b a | Bisymmetric matrixの一種だと思うのですが,4次および8次の場合には 2次の区分行列に分割した場合,各区分行列においても対称性が現れています. もしご存知の方がいらっしゃいましたらご教授頂けると助かります.

  • こんなソートがしたいです。教えてください!

    エクセル2003で 下記のようなデータをソートし、 【ソート前】 2208550 92059184 92059174 92059174B 92059174A 92059174C 1348535 19777225 2519034 2519034D 2519034B 2519035A 2519035C 【ソート後】 1348535 19777225 2208550 2519034 2519034B 2519034D 2519035A 2519035C 92059184 92059174 92059174A 92059174B 92059174C 上記ソート後の結果を得られるマクロを作りたいです。 よろしくお願いいたします。