3

私はこのような配列を持っています:

["Is", "Gandalf", "The", "Gray", "Insane"]

配列内のキーの位置に従ってハッシュを並べ替えたいと思います。たとえば、次のように並べ替えます。

{:count=>21, "Is"=>19, "Gandalf"=>1, "Gray"=>0, "Insane"=>1, "The"=>5}

これに:

{"Is"=>19, "Gandalf"=>1, "The"=>5, "Gray"=>0, "Insane"=>1, :count=>21}

別の例はこれをソートすることです:

{:count=>3, "Is"=>11, "Insane"=>22, "Gray"=>0, "Gandalf"=>12, "The"=>2}

これに:

{"Is"=>11, "Gandalf"=>12, "The"=>2, "Gray"=>12, "Insane"=>22, :count=>3}

どのようにそれをしますか?

4

2 に答える 2

4
class Hash
  def sort_by_array a; Hash[sort_by{|k, _| a.index(k) || length}] end
end

最初の例で機能します:

a = ["Is", "Gandalf", "The", "Gray", "Insane"]

{:count=>21, "Is"=>19, "Gandalf"=>1, "Gray"=>0, "Insane"=>1, "The"=>5}.sort_by_array(a)
# => {"Is"=>19, "Gandalf"=>1, "The"=>5, "Gray"=>0, "Insane"=>1, :count=>21}

ただし、2 番目の例で期待される結果は並べ替えだけでなく、 の値を変更する必要があるため、2 番目の例では機能しません"Gray"

{:count=>3, "Is"=>11, "Insane"=>22, "Gray"=>0, "Gandalf"=>12, "The"=>2}.sort_by_array(a)
# => {"Is"=>11, "Gandalf"=>12, "The"=>2, "Gray"=>0, "Insane"=>22, :count=>3}

# You wanted
# => {"Is"=>11, "Gandalf"=>12, "The"=>2, "Gray"=>12, "Insane"=>22, :count=>3}

12の値がどこから来るのかが明確でないため"Gray"、2 番目の例を満たす方法で質問に答えることができません。

于 2013-01-03T14:45:19.027 に答える
0

必要な順序で配列にデータを入力することにより、配列に変換することをお勧めします。次に、その配列を使用するか、その配列をハッシュマップに変換することで、配列自体にアクセスできます。

http://x3ro.de/ruby-19-array-hash/

同様の行を議論する1つのリンクは、

単純でないハッシュ (ハッシュのハッシュ) をソートする方法

于 2013-01-03T14:10:41.443 に答える