Как найти запись из массива двумерного массива в рельсах 3? - PullRequest
13 голосов
/ 16 августа 2011

Я работаю над Rails 3.0. У меня есть двумерный массив. Двумерный массив состоит из пользовательских данных и логического значения.

Например: [ [user1,true], [user2,true], [user3,false] ]

Это выглядит примерно так:

[
    [#<User id: 1, email: "abc@abc.com", username: "abc">, true],
    [#<User id: 2, email: "ijk@ijk.com", username: "ijk">, true],
    [#<User id: 3, email: "xyz@xyz.com", username: "xyz">, false],
]

Я хочу найти / извлечь записи условно; скажем, найти всю строку, где User id=2, она должна вернуть только вторую строку, т.е. [#<User id: 2, email: "ijk@ijk.com", username: "ijk">, true]

Есть ли в любом случае цикл через такие массивы? Как этого достичь?

Ответы [ 3 ]

23 голосов
/ 16 августа 2011
my_array.select{ |user, flag| user.id == 2}

все пользователи с истинным флагом:

my_array.select{ |user, flag| flag }

или ложным:

my_array.select{ |user, flag| !flag }
11 голосов
/ 16 августа 2011

Вы можете сделать что-то вроде

[ [user1,true], [user2,true], [user3,false] ].select { |u| u.first.id == 2}

Это вернет только те записи, у которых идентификатор пользователя равен 2.

9 голосов
/ 16 августа 2011

Тот же ответ, что и у @eugen, только синтаксическая разница (и использование детектирования для возврата одномерного массива вместо 2-мерного массива):

[ [user1,true], [user2,true], [user3,false] ].detect { |user, boolean| user.id == 2 }
=> [user2, true]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...