2015-04-07 62 views
0

我想做一個數據庫搜索程序使用哈希作爲我的數據庫存儲。用Hashes進行雙向搜索?

我可以使用成員數已經搜索列表中,但我如何搜索使用數字的片段(所以在進入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

你需要遍歷鍵,並比較各一個(爲ID)。部分名稱的值相同。 –

+0

適當的數據結構是[Trie](http://en.wikipedia.org/wiki/Trie)。 –

回答

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