【问题标题】:Sort array by values in a separate hash按单独哈希中的值对数组进行排序
【发布时间】:2014-03-10 21:29:16
【问题描述】:

我有一个哈希映射数组索引来对值进行排序,例如

{0=>"item_ss", 1=>"item_hsj", 2=>"item_skls"}

我有一个单独的数组,其中包含 line_item_id 和关联的 line_items(制表符分隔),如下所示:

["item_skls \t sim1\t99\n", "item_ss \t sim2\t54\n", "item_hsj \t sim3\t48\n"]

如何使用散列的值作为标识符和键作为数组的索引对数组进行排序?

比如我想让上面的数组排序如下:

["item_ss \t sim2\t99\n", "item_hsj \t sim3\t54\n", "item_skls \t sim1\t48\n"]

【问题讨论】:

  • 你的输出数组错了?
  • 你从哪里得到"item_ss \t sim2\t99\n"
  • 它来自数组中的第二个元素,抱歉我的输出错误,现在已修复。谢谢!
  • @Yogzzz 我很困惑。为什么要按值item_ss 等对item_skls 进行排序?
  • @Phrogz 来自哈希的索引与项目流行度相关联。我正在尝试根据散列按项目流行度对数组进行排序。

标签: ruby arrays sorting


【解决方案1】:
a = ["item_skls \t sim1\t99\n", "item_ss \t sim2\t54\n", "item_hsj \t sim3\t48\n"]
h = {0=>"item_ss", 1=>"item_hsj", 2=>"item_skls"}

puts a.sort_by.with_index{ |v,i| h[i] }
#=> item_ss      sim2   54
#=> item_hsj     sim3   48
#=> item_skls    sim1   99

【讨论】:

  • 它会起作用,直到时间键是 0,1,2 而不是任何随机整数.. :)
  • 如果哈希值类似于h = {20=>"item_ss", 31=>"item_hsj", 42=>"item_skls"} .. 那么?
  • @ArupRakshit 如原始问题所述,“作为数组索引的键”
【解决方案2】:

我愿意

hash = {0=>"item_ss", 1=>"item_hsj", 2=>"item_skls"}
array = ["item_skls \t sim1\t99\n", "item_ss \t sim2\t54\n", "item_hsj \t sim3\t48\n"]
array.sort_by { |s| hash.find { |_,v| s.starts_with? v }.first }
# => ["item_ss \t sim2\t54\n",
#     "item_hsj \t sim3\t48\n",
#     "item_skls \t sim1\t99\n"]

【讨论】:

  • 使用starts_with? 而不是include? 以使其更快
  • @NewAlexandria Humm.. 这取决于.. 无论如何都改变了。
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
相关资源
最近更新 更多