Rubyでハッシュが返されました
test_string = "{cat=6,bear=2,mouse=1,tiger=4}"
これらのアイテムのリストを、この形式で番号順に並べて取得する必要があります。
animals = [cat, tiger, bear, mouse]
私の考えは、これをルビーでto_sし、「=」文字で分割することでした。次に、それらを並べ替えて、新しいリストに入れてみてください。Rubyでこれを行う簡単な方法はありますか? サンプルコードは大歓迎です。
Rubyでハッシュが返されました
test_string = "{cat=6,bear=2,mouse=1,tiger=4}"
これらのアイテムのリストを、この形式で番号順に並べて取得する必要があります。
animals = [cat, tiger, bear, mouse]
私の考えは、これをルビーでto_sし、「=」文字で分割することでした。次に、それらを並べ替えて、新しいリストに入れてみてください。Rubyでこれを行う簡単な方法はありますか? サンプルコードは大歓迎です。
s = "{cat=6,bear=2,mouse=1,tiger=4}"
a = s.scan(/(\w+)=(\d+)/)
p a.sort_by { |x| x[1].to_i }.reverse.map(&:first)
以下のコードでそれを行う必要があります。インラインで手順を説明しました
test_string.gsub!(/{|}/, "") # Remove the curly braces
array = test_string.split(",") # Split on comma
array1= []
array.each {|word|
array1<<word.split("=") # Create an array of arrays
}
h1 = Hash[*array1.flatten] # Convert Array into Hash
puts h1.keys.sort {|a, b| h1[b] <=> h1[a]} # Print keys of the hash based on sorted values
a = test_string.split('{')[1].split('}').first.split(',')
# => ["cat=6", "bear=2", "mouse=1", "tiger=4"]
a.map{|s| s.split('=')}.sort_by{|p| p[1].to_i}.reverse.map(&:first)
# => ["cat", "tiger", "bear", "mouse"]
それを行うための最もエレガントな方法ではありませんが、機能します:
test_string.gsub(/[{}]/, "").split(",").map {|x| x.split("=")}.sort_by {|x| x[1].to_i}.reverse.map {|x| x[0].strip}
test_string = "{cat=6,bear=2,mouse=1,tiger=4}"
Hash[*test_string.scan(/\w+/)].sort_by{|k,v| v.to_i }.map(&:first).reverse
#=> ["cat", "tiger", "bear", "mouse"]