Ruby:对如何理解这段代码感到困惑

时间:2016-06-11 07:53:00

标签: ruby-on-rails ruby hash

我对此代码的一部分感到有些困惑。在第7行,我在下面评论过。

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] 覆盖。那么为什么当我运行此代码 data [0] 仍然是关键, data [1] 成为值?

2 个答案:

答案 0 :(得分:1)

第6行之后

data [0]是ALABAMA,data [1]是AL

第7行之后

州是{'ALABAMA'=> 'AL'}

它不覆盖数据[0] ..数据[0]是关键,数据[1]是值。

你可以尝试的一件好事是ruby的irb

答案 1 :(得分:1)

不,data[0]覆盖data[1]不是states。对于键data[1](该行的缩写部分),设置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
顺便说一句:我可能会这样写:

erase