2014-09-28 168 views
0

例如,我有字符串「黑暗騎士10.0」和我需要將其轉換成具有以下形式的密鑰值散列:紅寶石 - 將字符串轉換爲一個散列密鑰

黑暗騎士=> 10.0

如何創建一個塊,以便將從.db文件中獲取的此表單的所有字符串轉換爲上述表單的鍵值哈希值?

感謝您的幫助!

+0

我會去那裏你的主要問題是爲什麼這個數據以這種方式存儲在你的數據庫。這種格式沒有任何意義 - 您是否可以控制數據的存儲方式? – BroiSatse 2014-09-28 21:45:25

+0

完全控制,我正在使用sqlite。我對使用數據庫相當陌生 - 我需要在此腳本中記錄我的條目,如「添加,更新等」。 – SteenJobs 2014-09-28 22:03:32

+0

如果您完全控制它,則需要爲標題和評分分隔列,並將數據存儲在那裏。以這種方式存儲將對您的應用程序性能產生重大影響。你現在如何通過鐵軌控制器存儲它?突然間它變成了一個相當寬泛的問題 – BroiSatse 2014-09-28 22:04:54

回答

1

您需要一個正則表達式來隔離電影的名稱和評級(如果10.0是評級)。爲了提供更準確的正則表達式,我需要更多的輸入信息,但是對於上面的那個,這樣做可以做到這一點(如果電影,比如變形金剛2 9.0,它也會很小心,它會正確使用變形金剛2 => 9.0):

def convert_string_into_key_value_and_add_to_hash(string, hash_to_add_to) 
    name = string[/^[\w .]+(?=\s+\d+\.\d+$)/] 
    number = string[/\d+\.\d+$/].to_f 
    hash_to_add_to[name] = number 
end 

str = "The Dark Knight 10.0" 
hash = {} 
convert_string_into_key_value_and_add_to_hash(str, hash) 
p hash #=> {"The Dark Knight"=>10.0} 

更 'Rubyist' 的方法是使用rpartition:

def convert_string_into_key_value_and_add_to_hash(string, hash_to_add_to) 
    p partition = string.rpartition(' ') 
    hash_to_add_to[partition.first] = partition.last.to_f 
end 

str = "The Dark Knight 2 10.0" 
hash = {} 

convert_string_into_key_value_and_add_to_hash(str, hash) 
p hash #=> {"The Dark Knight 2"=>10.0} 
+0

嘗試用'15.10到Yuma 7.0''。 – BroiSatse 2014-09-28 21:51:22

+0

現在它工作:) – daremkd 2014-09-28 21:55:06

+0

所以我只是想出了: myint =「The Dark Knight 10.0」.scan(/ \ d + /)。join(「。「) 但你有什麼顯然明顯好多了(我驚訝於你能多快得到這樣的ST) 我想創建一個電影評級數據庫,並試圖加載哈希從一個db文件,所以我可以添加,更新等等。我使用從db文件中加載的數據定義了var「Movies」,但是我需要「Movies」作爲帶有鍵值的散列。 – SteenJobs 2014-09-28 21:59:15

0

假設你已經有一個集合中的字符串,在它們之間迭代(1),由過去的空間分割(2),並使用這兩部分作爲鍵/值將結果放入散列。

(1)見 '每個' 方法

(2)見 'rpartition' 方法(例如這裏:https://stackoverflow.com/a/20281590/1583220

希望它能幫助。

0

如果文件讀入一個數組,數組是從文件中的行中的每個元素,你會碰到這樣的:

arr = ["The Dark Knight 10.0", "The White Knight 9.4", "The Green Knight 8.1"] 

有很多方法可以每個字符串分爲兩個部分,爲散列中的鍵和值。這是一個辦法:

arr.each_with_object({}) do |str,h| 
    key, value = str.split(/\s(?=\d)/) 
    h[key] = value 
end 
    #=> {"The Dark Knight"=>"10.0", 
    # "The White Knight"=>"9.4", 
    # "The Green Knight"=>"8.1"} 

這裏(?=\d)在正則表達式被稱爲"positive lookahead"