【发布时间】:2014-09-14 18:00:40
【问题描述】:
我正在根据文本文件中的字数构建直方图。我有一个哈希数组,其键是单词,值是单词每行出现的次数。我需要在这个散列数组上使用sort 方法,按照出现次数最多的单词的顺序对值进行排序。这是我的排序线的样子:
twoOfArray.sort { |k, v| v <=> k }
twoOfArray.each { |key, value| puts "#{key} occurs #{value} times" "\n"}
完整代码是here。如果我使用 sort! 方法,我会收到未定义的方法错误。有谁知道为什么?
【问题讨论】:
-
sort在块中接受两个参数:每个都是原始类型,您的块告诉sort如何比较它们。所以应该是twoOfArray.sort { |a1, a2| # do something here to compare hash a1 with hash a2 }。从您的each声明来看,看起来twoOfArray本身就是一个哈希,而不是您所指出的哈希数组?因此,您正在尝试将sort应用于未定义的哈希。 -
请编辑以在您的问题中包含“完整代码”。问题应该能够在链接中断后继续存在。
-
@lurker 所以我的“twoOfArray”实际上只是一个哈希?因此,如果它只是一个哈希,那么我该怎么做才能对其进行排序呢?
-
在应用
sort时,Ruby 会在内部将散列转换为一个小型 2 元素数组的数组,并且根据给出的答案,需要相应地应用sort方法通过@StewartNelson。但是请记住,如果将其转换回哈希,则不能保证其顺序。哈希不是数组那样的有序数据类型。 -
bag.select返回什么?我认为 select 只需要 1 个参数,而不是k和v