如何在Ruby中搜索文本块并从哈希中提取匹配的元素?
我有一个包含32个NFL球队名称和位置字符串的散列列表(例如“巴尔的摩乌鸦队”、“匹兹堡钢人队”等) 我正在编写一个名为def search的类,它要求用户输入一个团队的名称,然后运行while循环来查看散列,尝试将用户输入的字符串与散列中的一段字符串匹配,并返回完整值 例如,如果输入Ravens,则应返回“Baltimore Ravens” 我不确定在代码中输入的内容是否正确,以获取输入的字符串片段并尝试将其与完整字符串匹配并返回结果。谷歌搜索没有帮我回答这个问题,所以我转向你们这些伟大的人 提前感谢你的帮助如何在Ruby中搜索文本块并从哈希中提取匹配的元素?,ruby,string,search,hash,matching,Ruby,String,Search,Hash,Matching,我有一个包含32个NFL球队名称和位置字符串的散列列表(例如“巴尔的摩乌鸦队”、“匹兹堡钢人队”等) 我正在编写一个名为def search的类,它要求用户输入一个团队的名称,然后运行while循环来查看散列,尝试将用户输入的字符串与散列中的一段字符串匹配,并返回完整值 例如,如果输入Ravens,则应返回“Baltimore Ravens” 我不确定在代码中输入的内容是否正确,以获取输入的字符串片段并尝试将其与完整字符串匹配并返回结果。谷歌搜索没有帮我回答这个问题,所以我转向你们这些伟大的人
实数代码:
def search(team, nfl)
favTeam = nfl.find_all { |i| i = team }
puts favTeam
end
这是在
nfl
数组中打印所有球队(不是散列,我犯了一个错误)。不完全确定我应该写什么来让它寻找团队(这是用户已经输入的)来将其与数组中的值进行比较。考虑到h
中的散列以及在s
中查找的子字符串:
key = h.detect { |k, v| v.downcase.index(s.downcase) }.to_a.first
将为您提供h
中的第一个键,其值包含s
(不区分大小写)。调用to_a
只是将可能的nil
返回转换为空数组而不需要额外检查的一种简单方法
如果你想要全部,那么:
keys = h.find_all { |k, v| v.downcase.index(s.downcase) }.map(&:first)
您可能希望在迭代之前对s
进行downcase,但对于32个值来说,这并不重要
参考资料:
- (又名
查找)
- (又名
选择)
更新以匹配更新的问题:因为您实际上有一个数组而不是散列:
matches = nfl.find_all { |name| name.downcase.index(team.downcase) }
您仍然可以使用find\u all
(或者select
,如果您更喜欢这个名称,只需调整block参数以匹配数组上find\u all
提供给您的内容。考虑到h
中的哈希值以及在s
中查找的子字符串:
key = h.detect { |k, v| v.downcase.index(s.downcase) }.to_a.first
将为您提供h
中的第一个键,其值包含s
(不区分大小写)。调用to_a
只是将可能的nil
返回转换为空数组而不需要额外检查的一种简单方法
如果你想要全部,那么:
keys = h.find_all { |k, v| v.downcase.index(s.downcase) }.map(&:first)
您可能希望在迭代之前对s
进行downcase,但对于32个值来说,这并不重要
参考资料:
- (又名
查找)
- (又名
选择)
更新以匹配更新的问题:因为您实际上有一个数组而不是散列:
matches = nfl.find_all { |name| name.downcase.index(team.downcase) }
您仍然可以使用find_all
(或者select
,如果您更喜欢这个名称,只需调整block参数以匹配数组上的find_all
提供给您的内容。这是我的代码:def search(team,nfl)favTeam=nfl.find_all{i | i=team}将favTeam置于打印nfl数组中所有团队的末尾(不是散列,我犯了一个错误)。不完全确定我应该写什么来让它查找team(这是用户已经输入的)以将其与数组中的值进行比较。因此,这是我的代码:def search(team,nfl)favTeam=nfl.find|all{I | I=team}将favTeam end打印到nfl数组中的所有团队(不是散列,我犯了一个错误)。我不完全确定我应该写什么来让团队(这是用户已经输入的)将其与数组中的值进行比较。