如何在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">]