我对此代码的一部分感到有些困惑。在第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] 成为值?
答案 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