【发布时间】:2011-01-04 17:25:37
【问题描述】:
有没有办法在 Ruby 数组中找到下一项?
代码:
# Find ALL languages
if !debug
lang = Language.all
else
lang = Language.where("id = ? OR id = ?", 22, 32)
end
# Get all elements
elements = Element.where("human_readable IS NOT NULL")
lang.each do |l|
code = l.code.downcase
if File.exists?(file_path + code + ".yml")
File.delete(file_path + code + ".yml")
end
t1 = Time.now
info = {}
elements.each do |el|
unless l.id == 1
et = el.element_translations.where("language_id = ? AND complete = ?", l.id, true)
else
et = el.element_translations.where("language_id = ?", 1)
end
et.each do |tran|
info[code] ||= {}
info[code][el.human_readable] = tran.content.gsub("\n", "").force_encoding("UTF-8").encode!
end
end
File.open(file_path + code + ".yml", "w", :encoding => "UTF-8") do |f|
if f.write(info.to_yaml)
t2 = Time.now
puts code + ".yml File written"
puts "It took " + time_diff_milli(t1, t2).to_s + " seconds to complete"
# This is where I want to display the next item in the lang array
puts lang.shift(1).inspect
puts "*"*50
end
end
end
【问题讨论】:
-
当心
puts lang.shift(1).inspect,在 lang 上迭代的块内使用它可能会导致一些问题。再说一次,它可能不会。 -
-1 表示难以理解的问题。不要只是将代码转储给我们并期望我们修复它。努力写出你的问题。
-
@Theo,我不只是向任何人“转储”代码......我只是在问一个问题......上面的代码是为了展示我所做的工作,以防万一有人需要参考它。
-
我认为问题在于这个问题看起来很简单,很难接受你实际上在问我们认为你在问什么,即给定索引 i 处的项目 x,你如何阅读 i 处的项目 y +1。如果是这样,那么
x = array[i]和y = array[i+1]。这甚至不是编程 101,它是编程幼儿园,所以我们无法想象这是你要问的。这不是要冒犯,而是要澄清。 -
在你的代码中也总是使用描述性的变量名。使用单个字母是没有意义的,实际上是糟糕的编码习惯。多花 500 毫秒来输入一个完整的单词,三个月后当你回去修复代码中的错误时,你会感谢自己。