【问题标题】:Sorting multidimensional array, descending对多维数组进行排序,降序
【发布时间】:2013-04-24 22:41:39
【问题描述】:

我的 ruby​​ 中有一个多维数组,如下所示:

arr= [{"10.0.1.50", "4"},
      {"10.0.1.51", "10"},
      {"10.0.1.48", "7"}]

我想对它进行排序,结果应该是:

result= [{"10.0.1.51", "10"},
         {"10.0.1.50", "4"},
         {"10.0.1.48", "7"}]

我基本上是在第一列 10.0.1.X 上进行排序。所以是按X排序的。

【问题讨论】:

  • 你是根据左侧“10.0.1.51”还是右侧“10”排序
  • @garbagecollection : 第一栏.....我刚刚编辑了帖子

标签: ruby-on-rails ruby arrays multidimensional-array


【解决方案1】:

语法不是 Ruby,结果有点模棱两可,但我猜你想要一些类似的东西

arr.sort_by { |(x,_)| x.split(".").map(&:to_i) }.reverse!

【讨论】:

  • 这不起作用,因为第一列 (10.0.1.X) 被视为字符串。有什么办法可以将其转换为浮动?如果我这样做 (.to_f) 它会将其转换为 10.0 忽略它之后的所有其他内容。
  • @sagar:您需要指定要用于排序的顺序。我在按字典顺序猜测,将点分隔的块解释为数字?如果您将 IP 地址表示为 32 位整数,则不会出现这些问题
  • 它说:未定义的方法 `to_i' for ["10.0.1.50"]:Array
  • @sogar:arr 是什么?我假设arr = [["10.0.1.50", "4"],["10.0.1.51", "10"],["10.0.1.48", "7"]]。我看不出["10.0.1.50"] 来自哪里。由于您的示例代码不是有效的 Ruby(Ruby 没有 {a_1,a_2,...,a_n} 形式的语法元素),我们只能猜测。
  • arr_tmp = $connection.execute("select code_ver from builds;") arr = Array.new arr = arr_tmp.inject(Hash.new(0)) { |hash,element|哈希[元素] +=1 哈希}
猜你喜欢
  • 1970-01-01
  • 2017-05-16
  • 2021-12-06
  • 2015-08-23
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多