在Ruby中搜索项目的对象数组

use*_*352 3 ruby arrays ruby-on-rails

我试图通过一组对象搜索值,但我无法使find_index工作.在我下面的代码中,我试图在数组中搜索名称(joseph).这是最好的方法吗?我想在搜索并找到它之后返回该对象.

name = "joseph"

array = [{"login":"joseph","id":4,"url":"localhost/joe","description":null},
{"login":"billy","id":10,"url":"localhost/billy","description":null}]

arrayItem = array.find_index {|item| item.login == name}

puts arrayItem
Run Code Online (Sandbox Code Playgroud)

Cri*_*scu 8

你的数组包含一个哈希,键是符号(在哈希中,key: value是一个简写:key => value).因此,您需要替换item.loginitem[:login]:

name = "joseph"

array = [{"login":"joseph","id":4,"url":"localhost/joe","description":nil},
{"login":"billy","id":10,"url":"localhost/billy","description":nil}]

arrayIndex = array.find_index{ |item| item[:login] == name }

puts arrayIndex
Run Code Online (Sandbox Code Playgroud)

上面的代码检索所搜索对象在数组中的索引.如果您想要对象而不是索引,请使用find而不是find_index:

arrayItem = array.find{ |item| item[:login] == name }
Run Code Online (Sandbox Code Playgroud)

另外,请注意,在Ruby中,null实际上是调用它nil.

  • `find_index`返回项目的索引,OP可能想要`find` (2认同)