Ruby: упорядоченный массив и добавление в массив по следующему номеру, если номер существует - PullRequest
0 голосов
/ 17 августа 2011

Мне было интересно, есть ли у кого-нибудь новый простой способ упорядочить массив по номерам, но если число уже существует, подтолкните его к следующему числу, которого не существует, я думал просто о создании многомерного упорядоченного массива, где еслиЧисла сталкиваются (например, 2 страницы, имеющие 1), тогда первым будет [1] [1], а вторым будет [1] [2], но есть ли лучший способ справиться с этим?

Edit;пример:

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

Обычно я проходил и YAML считывал конфигурации страниц и получал заказ, а затем использовал это число и устанавливал _site.sidebar[_config["order"]], но в этом случае он конфликтовал и не добавлялЭто.Поэтому я ищу способ учесть ошибки пользователя, но сохранить порядок, сохраняя первый найденный как единое целое, но если он существует, сдвиньте массив вниз и поместите второй 1 как два.

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Звучит так, как будто вы реализуете хеш-таблицу и используете «число» в качестве хеш-кода. Для этого есть все виды алгоритмов, просто ищите алгоритмы хеширования.

0 голосов
/ 18 августа 2011

Вот последний фрагмент того, как я реализовал то, о чем я спрашивал, на тот случай, если кто-то еще наткнется на этот поток, ища то же самое.Я просто хотел сохранить порядок, в моем реальном приложении кода я использовал обычный многомерный массив, так как «порядок» был извлечен из фронта 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...