我正在尝试使用Hash作为我的数据库存储来创建数据库搜索程序。
我已经可以使用会员编号搜索列表,但我如何使用数字片段进行搜索(因此输入1
会给您001
,010
,011
, 021
等等...)或碎片/完整用户名(输入ni
会提供Nightc||ed
和Oni
)
我目前的代码如下:
#rDB by Nightc||ed, ©2015
db = Hash.new()
db["001"] = "Oni"
db["002"] = "Eclipse"
db["003"] = "Saikou"
db["004"] = "Nightc||ed"
db["005"] = "Anime"
db["006"] = "Master"
x = 0
num = db.count
puts "IN: Member:"
num.times do |pair|
puts "#{db.keys[x]} | #{db.values[x]}"
x += 1
end
puts "-------------------
Enter index number:"
i = gets.to_i
i -= 1
system "cls"
puts "IN: Member:
#{db.keys[i]} | #{db.values[i]}"
sleep
答案 0 :(得分:1)
首先,迭代哈希。在每次迭代中,使用include?
在键和/或值中搜索部分结果。
这是一种允许用户输入部分号码或部分名称的方法:
db = Hash.new()
db["001"] = "Oni"
db["002"] = "Eclipse"
db["003"] = "Saikou"
db["004"] = "Nightc||ed"
db["005"] = "Anime"
db["006"] = "Master"
puts "Enter search term"
search_term = gets.chomp.downcase
results = db.select do |k,v|
k.downcase.include?(search_term) || v.downcase.include?(search_term)
end
results.size.times do |x|
puts "#{results.keys[x]} | #{results.values[x]}"
end
结果:
Enter search term
1
001 | Oni
Enter search term
ni
001 | Oni
004 | Nightc||ed
005 | Anime