Ruby finden, der nächste in der Reihe
Gibt es trotzdem, um das nächste Element in einem Ruby-Array?
Code:
# 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
- Weiter nach was?
- arbeiten Code ist oben
- Hüten Sie sich vor
puts lang.shift(1).inspect
mit, dass in einem block eine Iteration über lang dazu führen, dass einige Probleme. Dann wieder, ist es vielleicht nicht. - -1 für eine unverständliche Frage. Nicht nur dump code auf uns und erwarten von uns, es zu beheben. Legen Sie einige Mühe in das schreiben Ihrer Frage.
- Ich habe nicht nur "dump" - code auf jeder... ich war einfach nur eine Frage... der code oben war zu zeigen, die Arbeit, die ich getan hatte, im Falle jemand benötigt, um diese zu referenzieren.
- Ich denke das problem ist, die Frage scheint so einfach es ist schwer zu akzeptieren, dass Sie tatsächlich gefragt, was wir denken, werden Sie gefragt, d.h. bestimmte Element x am index i wie Lesen Sie das Element y i+1. Wenn ja, dann
x = array[i]
undy = array[i+1]
. Das ist nicht einmal die Programmierung 101, es ist die Programmierung kindergarten, so dass wir uns nicht vorstellen können ist dies, was Sie Fragen. Dies soll nicht beleidigen, sondern um zu klären. - Auch in deinem code immer verwenden Sie aussagekräftige Variablennamen. Es macht keinen Sinn, einzelne Buchstaben und in der Tat ist schlechter Programmierstil. Nehmen Sie eine zusätzliche 500 Millisekunden, um die geben Sie eine vollständige Wort-und du wirst danken, die sich drei Monate später, wenn Sie zurück gehen um einen Fehler zu beheben in Ihrem code.
- Wo in dem Beispiel-code haben Sie versucht,, um das nächste element in einem array? Entfernen Sie die nicht benötigten Sachen und zeigen ein prägnantes Beispiel für das problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Array
umfasstEnumerable
verwenden, so können Sieeach_with_index
:do_something unless next_element.nil?
Einen schönen Weg zur Iteration über eine
Enumerable
wenn Sie brauchen, um den Zugriff auf ein element und die nächste ist miteach_cons
:Wie bereits von Phrogz,
Enumerable#each_cons
ist erhältlich in Ruby 1.8.7+; für Ruby 1.8.6 können Sierequire 'backports/1.8.7/enumerable/each_cons'
.Als @Jacob weist darauf hin, der andere Ansatz ist die Verwendung
each_with_index
.each_cons
ist nur in 1.8.7+ (nicht in 1.8.6).Basierend auf Marc-Andrés nette Antwort will ich geben eine Antwort, die, in einer generischen Art und Weise, zeigt das folgende element für alle - Elemente, die auch die letzten, durch die Polsterung mit
nil
:Nun, während wir dabei sind, wir können auch die vorhergehenden element für alle Elemente: