2016-06-11 95 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