【问题标题】:RUBY WATIR - Sort duplicate keys stored in Hash [duplicate]RUBY WATIR - 对存储在哈希中的重复键进行排序 [重复]
【发布时间】:2016-03-29 17:25:19
【问题描述】:

我正在尝试对哈希键进行排序,(键可以重复)但 Ruby 忽略了重复的键,然后对剩余的键进行排序并发出警告,如下所示。

代码:

gridColumn1= Hash.new{|hsh,key| hsh[key] = [] }

gridColumn1 = { "z"=>["AAPL"], "A"=>["B"], "A"=>["AAPL", "FB", "GE"], "GOOG"=>["HD", "QQQ", "SCHW"], "V"=>[]}

gridColumn1.sort.to_h

实际输出:

{"A"=>["AAPL", "FB", "GE"], "GOOG"=>["HD", "QQQ", "SCHW"], "V"=>[], "z"=>["AAPL"]}

warning: duplicated key at line 14 ignored: "A"

我期待:

{"A"=>["B"], "A"=>["AAPL", "FB", "GE"], "GOOG"=>["HD", "QQQ", "SCHW"], "V"=>[], "z"=>["AAPL"]} 

【问题讨论】:

  • 请阅读the Hash documentation: "A Hash is a dictionary-like collection of unique keys and their values." 你不能做你想做的事。

标签: ruby sorting duplicates key watir


【解决方案1】:

Ruby hash 不能有重复的键,它的全部目的是映射键-> 值。

要拥有重复的键 - 您可以使用数组数组:

gridColumn1 = [
  ["z", ["AAPL"]],
  ["A",["B"]],
  ["A",["AAPL", "FB", "GE"]],
  ["GOOG", ["HD", "QQQ", "SCHW"]],
  ["V", []]
]

gridColumn1.sort_by &:first
# => [["A", ["B"]], ["A", ["AAPL", "FB", "GE"]], ["GOOG", ["HD", "QQQ", "SCHW"]], ["V", []], ["z", ["AAPL"]]]

【讨论】:

  • 感谢 Vasfed,我可以采用这种方法,但我仍然以 [["A", ["AAPL", "FB", "GE"]], ["A" , ["B"]], ["GOOG", ["HD", "QQQ", "SCHW"]], ["V", []], ["z", ["AAPL"]]] 但是我期待 [["A", ["B"]],["A", ["AAPL", "FB", "GE"]], ["GOOG", ["HD", "QQQ", "SCHW"]], ["V", []], ["z", ["AAPL"]]] .
  • @Dave 这意味着您不仅要对键进行排序,还要对值进行排序,您可以 .sort_by &:to_s
  • 没有。 gridColumn1 = [ ["Z"],["A", "K", "N"], ["A", "C"], ["A", "B"]] 说,我要排序每个子数组的第一个元素上的二维数组和我正在寻找的输出是 gridColumn1 = [ ["A", "K", "N"], ["A", "C"], ["A", “B”],[“Z”]]。早些时候我改为哈希,因为我没有使用数组获得高于输出但哈希不能有重复的键,现在我又回到了同样的问题。感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多