Подтвердить что ты не робот

Как найти запись из массива двухмерного массива в рельсах 3?

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

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

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

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

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

Нужно ли все-таки перебирать такие массивы? Как это можно достичь?

4b9b3361

Ответ 1

my_array.select{ |user, flag| user.id == 2}

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

my_array.select{ |user, flag| flag }

или false:

my_array.select{ |user, flag| !flag }

Ответ 2

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

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

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

Ответ 3

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

[ [user1,true], [user2,true], [user3,false] ].detect { |user, boolean| user.id == 2 }
=> [user2, true]