Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby中使用附加条件对哈希进行排序_Ruby - Fatal编程技术网

在ruby中使用附加条件对哈希进行排序

在ruby中使用附加条件对哈希进行排序,ruby,Ruby,我有一个像这样的杂烩 result_array = Hash[h.sort_by{|k, v| v}.reverse] 此结果数组将具有排序后的h散列值。我的问题是,当两个哈希值相同时,我想检查不同的条件。我现在该怎么办 请注意,当您阅读以下内容时,我的密钥是一个名为Vendor的对象。 不同的条件是,如果两个键的值相同。如果键的值相同,我将进行比较 if k.works.number_of_views > k.next.works.number_of_views k else k

我有一个像这样的杂烩

result_array = Hash[h.sort_by{|k, v| v}.reverse]
此结果数组将具有排序后的
h
散列值。我的问题是,当两个哈希值相同时,我想检查不同的条件。我现在该怎么办


请注意,当您阅读以下内容时,我的密钥是一个名为Vendor的对象。 不同的条件是,如果两个键的值相同。如果键的值相同,我将进行比较

if k.works.number_of_views > k.next.works.number_of_views
 k
else
 k.next
end

使用字典顺序:

result_hash = Hash[h.sort_by { |k, v| [v, some_condition(k, v)] }.reverse]

你能举一个“不同条件”的例子吗?一个示例输入也会有帮助。我想你说的是,如果
h[k1]==h[k2]
,你想通过比较
k1.next.works.number\u视图
k2.next.works.number\u视图
对哈希元素进行排序。如果这是正确的,用
k.next.works.number\u视图替换@tokland答案中的
某些条件(k,v)
。您也可以编辑您的问题以进行澄清,以便于将来阅读。请检查编辑后的问题。如何在这里添加if条件?您的问题中不清楚,如果第二个条件是视图数,那么:
[v,k.works.number\u of\u views]
。第二个条件不是键数。如果键的值相等,那么我将检查当前键的k.works.number\u视图是否大于k.next.number\u视图。我将返回一个拥有最多视图的。密钥是模型“供应商”的对象。