Hash 可以按键或值排序吗?
Can Hash be sorted by keys or values?
是否可以在以下代码中按键或按值对 Hash 进行排序:
myhash.each_key do |key|
print myhash[key], "\t:\t", key, "\n"
end
按键排序:
myhash = {5 => "five", 3 => "three", 2 => "two", 4 => "four", 1 => "one"}
myhash.keys.sort.each do |key|
print myhash[key], "\t:\t", key, "\n"
end
产生
one : 1
two : 2
three : 3
four : 4
five : 5
按值排序比较费力:
myhash.to_a.sort { |item1, item2| item1[1] <=> item2[1] }.each do |item|
puts item.join("\t:\t")
end
产生
5 : five
4 : four
1 : one
3 : three
2 : two
如果您想要 value:key 顺序的结果,请更改
puts item.join("\t:\t")
至
puts item.reverse.join("\t:\t")
由于 Crystal Hash
保留了插入顺序,因此实际上可以进行排序 Hash
:
myhash.to_a.sort.to_h
要按值排序,
myhash.to_a.sort_by { |k, v| v }.to_h
要排序 in-place,它有点笨重:
myhash = {5 => "five", 3 => "three", 2 => "two", 4 => "four", 1 => "one"}
entries = myhash.to_a.sort
myhash.clear
entries.each { |k, v| myhash[k] = v }
是否可以在以下代码中按键或按值对 Hash 进行排序:
myhash.each_key do |key|
print myhash[key], "\t:\t", key, "\n"
end
按键排序:
myhash = {5 => "five", 3 => "three", 2 => "two", 4 => "four", 1 => "one"}
myhash.keys.sort.each do |key|
print myhash[key], "\t:\t", key, "\n"
end
产生
one : 1
two : 2
three : 3
four : 4
five : 5
按值排序比较费力:
myhash.to_a.sort { |item1, item2| item1[1] <=> item2[1] }.each do |item|
puts item.join("\t:\t")
end
产生
5 : five
4 : four
1 : one
3 : three
2 : two
如果您想要 value:key 顺序的结果,请更改
puts item.join("\t:\t")
至
puts item.reverse.join("\t:\t")
由于 Crystal Hash
保留了插入顺序,因此实际上可以进行排序 Hash
:
myhash.to_a.sort.to_h
要按值排序,
myhash.to_a.sort_by { |k, v| v }.to_h
要排序 in-place,它有点笨重:
myhash = {5 => "five", 3 => "three", 2 => "two", 4 => "four", 1 => "one"}
entries = myhash.to_a.sort
myhash.clear
entries.each { |k, v| myhash[k] = v }