Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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,我有这个: list = [[apple, John], [apple, Paul], [banana, Paul]] 像这样: list = [[apple, [John, Paul]], [banana, [Paul]] 我不知道如何解决这个问题,因为我需要知道每个元素的频率,并根据整个列表对它们重新排序 list.group_by(&:first).map { |fruit, preferences| [fruit, preferences.map(&:last)] }

我有这个:

list = [[apple, John], [apple, Paul], [banana, Paul]]
像这样:

list = [[apple, [John, Paul]], [banana, [Paul]]
我不知道如何解决这个问题,因为我需要知道每个元素的频率,并根据整个列表对它们重新排序

list.group_by(&:first).map { |fruit, preferences| [fruit, preferences.map(&:last)] }
使用,根据哈希中的键聚合所有值,然后转换回数组

list.each_with_object(Hash.new{[]}) { |x, h| h[x.first] <<= x.last }.to_a
=> [["apple", ["John", "Paul"]], ["banana", ["Paul"]]]
还有一条路

list = [%w|apple John|, %w|apple Paul|, %w|banana Paul|]
  #=> [["apple", "John"], ["apple", "Paul"], ["banana", "Paul"]]

list.each_with_object({}) { |(fruit,name),h| h.update(fruit=>[name]) { |_k,o,n| o+n } }
  #=> {"apple"=>["John", "Paul"], "banana"=>["Paul"]}

这使用了aka合并的形式!它使用块{| uk,o,n | o+n}来确定合并的两个哈希中存在的键的值。有关三个块变量_k、o和n的定义,请参见文档。下划线告诉读者,块计算中不使用通常只写的k

您的数据结构不是有效的Ruby数据结构。还有,你试过什么?是为了帮助您解决所编写代码的问题,而不是为您编写代码!请提供所需输入和输出的规格,包括转角情况和例外情况。给出有效输入和所需输出的示例,包括演示拐角情况的示例。也许阅读,调查,采取和检查。你可能希望使用散列。
list = [%w|apple John|, %w|apple Paul|, %w|banana Paul|]
  #=> [["apple", "John"], ["apple", "Paul"], ["banana", "Paul"]]

list.each_with_object({}) { |(fruit,name),h| h.update(fruit=>[name]) { |_k,o,n| o+n } }
  #=> {"apple"=>["John", "Paul"], "banana"=>["Paul"]}