如何从rails 3中的二维数组中查找记录?

时间:2011-08-16 07:42:52

标签: ruby ruby-on-rails-3 multidimensional-array

我正在研究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 个答案:

答案 0 :(得分:23)

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

所有拥有真旗的用户:

my_array.select{ |user, flag| flag }

或false:

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

答案 1 :(得分:11)

您可以执行类似

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

这将仅返回用户ID等于2的记录。

答案 2 :(得分:9)

与@eugen相同的答案,只有语法差异(并使用detect返回单维数组而不是2维数组):

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