我有一个包含提交ID(密钥)和数字(值)的哈希。在下面我如何将值添加到哈希:
@allCommits[commit] = count
以下是提交ID及其值的示例:
Key: 42ac06787b8db8a6a299aa65482072f238dffc21
Value: 3
Key: a2658427039df49687d5ea590d8a0053631a2571
Value: 1
Key: 4ab0aab2e5fe9d650ce1fb96c48587783c7e296c
Value: 1
Key: 469a15d2ecea8671a3f3c77813011163e2605d9e
Value: 4
Key: 66558be4e7ddd5e9d9db3d512c859410d275c97a
Value: 1
Key: ee9b9bac044c8306c81c7b3a3aa0632a7835e913
Value: 2
然后,在打印之前,我想根据值按降序排序哈希。所以,我做了
@allCommits.sort_by {|k,v| v}.reverse
但它没有用,它给了我订单,因为我插入哈希。
我也试过
Hash[@allCommits.sort_by{|k, v| v}.reverse]
但没有。
我在这里看不到问题,有什么帮助吗?
答案 0 :(得分:1)
这似乎对我有用:
输入:
@all_commits = {
'42ac06787b8db8a6a299aa65482072f238dffc21' => 3,
'a2658427039df49687d5ea590d8a0053631a2571' => 1,
'4ab0aab2e5fe9d650ce1fb96c48587783c7e296c' => 1,
'469a15d2ecea8671a3f3c77813011163e2605d9e' => 4,
'66558be4e7ddd5e9d9db3d512c859410d275c97a' => 1,
'ee9b9bac044c8306c81c7b3a3aa0632a7835e913' => 2
}
puts "Sorted"
@all_commits.sort_by {|k,v| v}.reverse.each{|x| p x}
puts
puts "Unsorted"
@all_commits.each{|x| p x}
输出:
Sorted
["469a15d2ecea8671a3f3c77813011163e2605d9e", 4]
["42ac06787b8db8a6a299aa65482072f238dffc21", 3]
["ee9b9bac044c8306c81c7b3a3aa0632a7835e913", 2]
["4ab0aab2e5fe9d650ce1fb96c48587783c7e296c", 1]
["a2658427039df49687d5ea590d8a0053631a2571", 1]
["66558be4e7ddd5e9d9db3d512c859410d275c97a", 1]
Unsorted
["42ac06787b8db8a6a299aa65482072f238dffc21", 3]
["a2658427039df49687d5ea590d8a0053631a2571", 1]
["4ab0aab2e5fe9d650ce1fb96c48587783c7e296c", 1]
["469a15d2ecea8671a3f3c77813011163e2605d9e", 4]
["66558be4e7ddd5e9d9db3d512c859410d275c97a", 1]
["ee9b9bac044c8306c81c7b3a3aa0632a7835e913", 2]
我的猜测是你执行sort_by
但不捕获结果。在ruby中,许多方法返回 new 对象,并且不更新原始哈希。因此,如果您有哈希值,然后在其上调用sort_by
,那么在另一行上尝试再次打印哈希值,您将看到原始哈希值,因为它没有更新。相反,您必须使用sort_by
调用的返回值。
答案 1 :(得分:0)
我做了这个测试,似乎你的代码工作了:
setResultConverter(button -> {
// here you can also check what button was pressed
// and return things accordingly
return new Result(offsetXText.getText(), offsetYText.getText());
});
输出:
ImageEffectInputDialog dialog = new ImageEffectInputDialog("Title");
dialog.showAndWait().ifPresent(result -> {
// do something with result object, which is of type Result
});