Ruby:有序数组,如果存在数字,则在下一个数字处添加到数组

时间:2011-08-17 13:48:41

标签: ruby arrays multidimensional-array

我想知道是否有人通过数字组织数组的简单方法,但如果数字已存在则将其推送到下一个不存在的数字我想到的只是创建一个多维有序数组,其中if数字冲突(例如2页有1)然后第一个将是[1] [1]而第二个将是[1] [2]但是有更好的方法来处理这个吗?

编辑;一个例子:

page1 -> sets order to 1
page2 -> sets order to 1
page3 -> sets order to 2

通常我会经历并且YAML读取页面配置并获取订单然后使用该数字并设置_site.sidebar[_config["order"]]但在这种情况下它会发生冲突并且不会添加它。所以我正在寻找一种方法来允许用户犯错,但保留顺序保持第一个被发现为一个但如果存在则将数组向下移动并将第二个1作为两个。

2 个答案:

答案 0 :(得分:2)

这听起来像是在实现一个哈希表,并使用'number'作为哈希。有各种各样的算法,只需寻找哈希表算法。

答案 1 :(得分:0)

这是关于我如何实现我所询问的最终片段,以防其他人偶然发现这个线程正在寻找同样的事情。我基本上只想保留顺序,在我实际使用的代码中我使用了一个普通的多维数组,因为“order”是从YAML前面拉出来的,所以它是它自己的变量。

data = []
demo = {
  "page_1" => {
    "order" => 1,
    "data" => "Hello World 1"
  },
  "page_2" => {
    "order" => 2,
    "data" => "Hello World 2"
  },
  "page_3" => {
    "order" => 1,
    "data" => "Hello World 3"
  },
  "page_4" => {
    "order" => "a",
    "data" => "Hello World 4"
  }
}

demo.each |key, page|
  local_data = page["data"]
  order      = page["order"].to_i.floor

  data[order] ||= []
  data[order] << local_data

}
puts data.flatten.join(" ").strip