让我们说无论出于何种原因,我将在ruby脚本文件中定义一个数组变量,该文件将所有美国状态保存为字符串。这样做的干净方法是什么?通过干净,我不是在寻找性能,而是更具可读性。
以下是我尝试过的几种方法,但不太喜欢:
单个 LONG 行定义。我不关心这个,因为它很长,或者需要自己包装。
states = ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", ...]
另一个选项是多行定义,将字符串推送到数组。这解决了长行(宽度方向),但我不关心赋值和array.push的混合使用。
states = ["Alabama", "Alaska", "Arizona"]
states.push("Arkansas", "California", "Colorado")
states.push("...")
另一种选择是单线推送。这似乎是一致的,但可能需要很长时间才能完成。
states = []
states.push("Alabama")
states.push("Alaska")
states.push("Arizona")
states.push("...")
现在,当然,理想情况下,我不会硬编码我的数组值,应该从数据库或Web服务等中提取它们。但是,出于问题的目的,让我们假设值不存在当前其他任何地方。
答案 0 :(得分:8)
ruby中有一个实际的语法元素用于定义这样的数组:
> states = %w(Alabama Alaska Arizona
> Arkansas California
> Colorado)
=> ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado"]
但请注意,它会将元素拆分为空格。因此,像“北达科他”这样的条目将最终成为两个项目:“北方”和“达科他”。
答案 1 :(得分:3)
如果你愿意,可以把它们放在多行......
states = ["Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
...]
关键是用逗号结束这些行。以下内容不起作用:
# Does not work!
states = ["Alabama"
,"Alaska"
,"Arizona"
,"Arkansas"
,"California"
,"Colorado"
...]
答案 2 :(得分:3)
您可以通过字符串构建数据:
states = %{Alabama
Alaska
Arizona
Arkansas
California
Colorado
Nort Carolina
}.each_line.map{|s| s.strip}
p states
优势: 您可以将数据存储在文本文件中。
states = states = File.readlines('countries.txt').map{|s| s.strip}
和countries.txt:
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Nort Carolina
答案 3 :(得分:2)
使用这个技巧,你会发现它可以相当整齐地解决问题。
ruby-1.9.2-p290 :001 > text = %w( hello yo wazzap
ruby-1.9.2-p290 :002]> hi
ruby-1.9.2-p290 :003]> hello)
=> ["hello", "yo", "wazzap", "hi", "hello"]
ruby-1.9.2-p290 :004 > text
=> ["hello", "yo", "wazzap", "hi", "hello"]
我可能还建议将数据存储在文件中的各行上,然后使用简单的命令将其生成为数组:
array = File.readlines('input.txt')
答案 4 :(得分:0)
假设状态(数组值)不需要在脚本文件本身中定义,基于提供的所有其他答案,我可能会将状态存储在单独的逗号分隔文件中并执行此操作
states = File.read('states.txt').split(',')