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的记录.
与@eugen相同的答案,只有语法差异(并使用detect返回单维数组而不是2维数组):
[ [user1,true], [user2,true], [user3,false] ].detect { |user, boolean| user.id == 2 }
=> [user2, true]
Run Code Online (Sandbox Code Playgroud)