使用哈希进行双向搜索?

时间:2015-04-07 17:18:32

标签: ruby hash

我正在尝试使用Hash作为我的数据库存储来创建数据库搜索程序。

我已经可以使用会员编号搜索列表,但我如何使用数字片段进行搜索(因此输入1会给您001010011021等等...)或碎片/完整用户名(输入ni会提供Nightc||edOni

我目前的代码如下:

#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

1 个答案:

答案 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