我正在研究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]
无论如何都要遍历这样的数组?如何实现?
答案 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]