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

Bon*_*ngs 13 ruby multidimensional-array ruby-on-rails-3

我正在研究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],
]
Run Code Online (Sandbox Code Playgroud)

我想有条件地找到/提取记录; 说找到整行User id=2,它应该只返回第二行即[#<User id: 2, email: "ijk@ijk.com", username: "ijk">, true]

无论如何都要遍历这样的数组?如何实现?

fl0*_*00r 23

my_array.select{ |user, flag| user.id == 2}
Run Code Online (Sandbox Code Playgroud)

所有拥有真旗的用户:

my_array.select{ |user, flag| flag }
Run Code Online (Sandbox Code Playgroud)

或者假:

my_array.select{ |user, flag| !flag }
Run Code Online (Sandbox Code Playgroud)


eug*_*gen 11

你可以做点什么

[ [user1,true], [user2,true], [user3,false] ].select { |u| u.first.id == 2}
Run Code Online (Sandbox Code Playgroud)

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


rub*_*nce 9

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

[ [user1,true], [user2,true], [user3,false] ].detect { |user, boolean| user.id == 2 }
=> [user2, true]
Run Code Online (Sandbox Code Playgroud)