如何在ruby中返回数组中指定哈希键的值?

如何在ruby中返回数组中指定哈希键的值?,ruby,arrays,search,Ruby,Arrays,Search,我有一个方法,尝试搜索数组,查找与指定键和值匹配的每个记录 def search(key, query) some_stuff = [{"title"=>"Awesome Book", "author"=>"John Doe", "qty"=>"5"}, {"title"=>"Another Book", "author"=>"Jane Doe", "qty"=>"2"}, {"title"=>"Ruby Book", "author"=>

我有一个方法,尝试搜索数组,查找与指定键和值匹配的每个记录

def search(key, query)
     some_stuff = [{"title"=>"Awesome Book", "author"=>"John Doe", "qty"=>"5"}, {"title"=>"Another Book", "author"=>"Jane Doe", "qty"=>"2"}, {"title"=>"Ruby Book", "author"=>"John Hancock", "qty"=>"4"}]
    # If I put the following in the block it will return has records 
    #however how do I substitute with key and query?
    some_stuff.select {|b| b[].include? "jo" }
    if matches.any?
       # has records
    else
       # has no records
    end
end

# If i call object.search(author, jo)
# I want to return the two records containing authors names with "jo" in them

# Similarly if I call object.search(title, rub)
# I want the query to return 1 record
另外,您将如何按指定字段对其进行排序

目前我正在考虑使用case开关,但我几乎肯定有一种更简单的方法

require 'pp'

SOME_STUFF = [
  {"title"=>"Another Book", "author"=>"Jane Doe", "qty"=>"2"}, 
  {"title"=>"Ruby Book", "author"=>"John Hancock", "qty"=>"4"},
  {"title"=>"Awesome Book", "author"=>"John Doe", "qty"=>"5"},
]

def search(key, query)
  SOME_STUFF.select {|record| record[key].downcase.include? query }
end


pp search('author', 'jo')
pp search('title', 'ru')

 --output:--
[{"title"=>"Ruby Book", "author"=>"John Hancock", "qty"=>"4"},
 {"title"=>"Awesome Book", "author"=>"John Doe", "qty"=>"5"}]
[{"title"=>"Ruby Book", "author"=>"John Hancock", "qty"=>"4"}]
另外,您将如何按指定字段对其进行排序

编辑:

require'pp'
课堂用书
def标题
@头衔
结束
def标题=(val)
@title=val
结束
属性访问器:作者:数量与上述作者相同,数量
一些东西=[
新书(“红宝石书”,“约翰·汉考克”,4),
新书(“另一本书”,“简·多伊”,2),
新书(“很棒的书”,“无名氏”,5),
]
def搜索(键,查询)
一些东西。选择要做的事
book.send(键)。downcase.include?查询
end.sort_by{| book | book.send(key)}
结束
pp搜索('作者','工作')
pp搜索('title','ru')
--输出:--
[#,
#]
[#]

send()方法将字符串/符号(或包含字符串/符号的变量)作为参数,然后send()基本上会说,“嘿,ruby,调用我在我左边的对象上指定的方法。”在很多编程语言中,只要方法名是字符串,就需要调用对象上的方法。ruby给了我们send()。

很抱歉,我是ruby的新手。我想我已经发现了问题所在。我的数组有一个图书对象列表。所以record.title可以工作,但是record[“title”]抛出了一个错误。感谢您的澄清
require 'pp'

SOME_STUFF = [
  {"title"=>"Another Book", "author"=>"Jane Doe", "qty"=>"2"}, 
  {"title"=>"Ruby Book", "author"=>"John Hancock", "qty"=>"4"},
  {"title"=>"Awesome Book", "author"=>"John Doe", "qty"=>"5"},
]

def search(key, query)
  SOME_STUFF.select do |record| 
    record[key].downcase.include? query 
  end.sort_by {|hash| hash[key]}
end


pp search('author', 'jo')
pp search('title', 'ru')

--output:--
[{"title"=>"Awesome Book", "author"=>"John Doe", "qty"=>"5"},
 {"title"=>"Ruby Book", "author"=>"John Hancock", "qty"=>"4"}]
[{"title"=>"Ruby Book", "author"=>"John Hancock", "qty"=>"4"}]
require 'pp'

class Book

  def title
    @title
  end

  def title=(val)
    @title = val
  end

  attr_accessor :author, :qty  #Same as above for author, qty


SOME_STUFF = [
  Book.new("Ruby Book", "John Hancock", 4),
  Book.new("Another Book", "Jane Doe", 2),
  Book.new("Awesome Book", "John Doe", 5),
]

def search(key, query)
  SOME_STUFF.select do |book| 
    book.send(key).downcase.include? query 
  end.sort_by {|book| book.send(key)}
end


pp search('author', 'jo')
pp search('title', 'ru')


--output:--

[#<Book:0x00000100929590 @author="John Doe", @qty=5, @title="Awesome Book">,
 #<Book:0x00000100933270 @author="John Hancock", @qty=4, @title="Ruby Book">]
[#<Book:0x00000100933270 @author="John Hancock", @qty=4, @title="Ruby Book">]