Рубиновый массив, эквивалентный активной записи .where (критерии) - PullRequest
5 голосов
/ 23 августа 2011

Это может быть очень длинный отрезок, но если бы он существовал, то жизнь стала бы немного проще.

Вот сценарий в любом случае. У меня есть массив хэшей с одним ключом, значение которого является другим хэшем ........ Да, я знаю.

Вот лучшее объяснение:

@myArrayOfStuff[0]
@myArrayOfStuff[0]["single-key"]
@myArrayOfStuff[0]["single-key"]["object-identifier"]

Первый возвращает хеш. Вторая возвращает объект (в моем случае это называется page, но в примере используются другие имена) Третий возвращает любую переменную, на которую я ссылаюсь, в качестве идентификатора объекта.

Достаточно просто.

То, что я хотел бы сделать, это выбрать создать другой массив, где значение идентификатора объекта не равно nil или больше, чем x. Нечто похожее на метод activerecord.where.

@x = @myArrayOfStuff.where(["single-key"]["object-identifier"]) > 3orwhatever

Очевидно, что это не работает, поскольку синтаксис является ложным. Но есть ли другой способ сделать это? Возможно, еще один способ попробовать отсортировать массив по этой переменной. Что-то вроде

@x = @myArrayOfStuff.sort {|x,y| y <=> x } 

Однако я не совсем понимаю, что происходит с методом сортировки ruby. Кто-нибудь может помочь?

Ответы [ 2 ]

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

Вы можете использовать метод выбора .

@x = @my_array_of_stuff.select {|v| v["single-key"]["object-identifier"] > 3}
0 голосов
/ 26 июля 2016
collection = [
  {a:1, b:2, c:3},
  {a:2, b:3, c:4}
]
where = {a:1}
collection.select{|item|
  where.map{|k,v|
    item[k] == v ? true : nil
  }.compact.length == where.length
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...