2016-06-11 93 views
0

我對這段代碼的一部分有點困惑。在第7行中,我已經在下面進行了評論。Ruby:對如何理解這段代碼感到困惑

01:states_file = File.open("states_abbrev.txt") 
02:states = {} 
03:while ! states_file.eof? 
04:  first = states_file.gets.chomp 
05:  #"ALABAMA,AL" 
06:  data = first.split(",") 
07:  states[ data[0] ] = data[1] #This line here. 
08:end 
09:puts states.inspect 
10: 
11:states_file.close 

第5行是和states_abbrev.txt文件中每行相似的示例。只是一個國家,一個逗號,縮寫和回車。所有50個州都在文件中。

正如你可以在第7行看到數據[0]鍵似乎是由數據[1]被覆蓋。那麼,爲什麼當我運行這個代碼數據[0]仍然是關鍵,並且數據[1]成爲值?

回答

1

線後6

數據[0]是亞拉巴馬州,數據[1]是AL

後線7種

狀態是{ '阿拉巴馬州'=> 'AL'}

它不覆蓋數據[0] ..數據[0]是密鑰,數據[1]是值。你可以嘗試

一件好事,是Ruby的IRB

1

不,它不是由覆蓋的data[0]。這是散列states設置(這是一個州的名稱)的關鍵data[0](這是該行的縮寫部分)。

也許很容易,當你介紹更多的變量或更好的名字來理解:

file = File.open("states_abbrev.txt") 
states = {} 

while !file.eof? 
    line = file.gets.chomp 
    name, abbr = line.split(",") 
    states[abbr] = name 
end 

file.close 

順便說一句:我可能會寫這樣的事:

File.open('states_abbrev.txt') do |file| 
    file.each_line.map { |line| line.chomp.split(',').reverse }.to_h 
end 
+0

我有一個很難包裝我圍着它轉。現在我想我已經理解了這個概念。謝謝。 – Drew