Кнопка Open в Файле Открытое диалоговое окно имеет немного вниз стрелка рядом с ним. Нажмите это, и Вы получаете опцию "Open With", которая включает Двоичного Редактора. Как парень системного типа, я нахожу это довольно ценным, но большинство моих коллег не знало об этом, пока я не показал им.
Да, вы можете использовать each_with_index
collection = ["element1", "element2"]
collection.each_with_index {|item,index| puts item; puts index}
переменная index дает вам индекс элемента во время каждой итерации
Ruby обычно использует итераторы, а не циклы; вы можете получить все функции циклов с помощью мощных итераторов Ruby.
Для этого есть несколько вариантов, предположим, что у вас есть массив arr размером 1000.
1000.times {|i| puts arr[i]}
0.upto(arr.size-1){|i| puts arr[i]}
arr.each_index {|i| puts arr[i]}
arr.each_with_index {|e,i| puts e} #i is the index of element e in arr
Все эти примеры предоставляют ту же функциональность
Как насчет шага
?
0.step(1000,2) { |i| puts i }
эквивалентен:
for (int i=0; i<=1000; i=i+2) {
// do stuff
}
В Ruby цикл for
может быть реализован как:
1000.times do |i|
# do stuff ...
end
Если вам нужны и элемент, и индекс, тогда синтаксис each_with_index
будет возможно лучше всего:
collection.each_with_index do |element, index|
# do stuff ...
end
Однако цикл each_with_index
работает медленнее, поскольку он предоставляет объекты как element
, так и index
для каждой итерации цикла.
, когда мне просто нужны числа (и я не хочу повторять), я предпочитаю следующее:
(0..10000).each do |v|
puts v
end
раз
рекомендуется вместо each_with_index
. раз
примерно в 6 раз быстрее. Запустите приведенный ниже код.
require "benchmark"
TESTS = 10_000_000
array = (1..TESTS).map { rand }
Benchmark.bmbm do |results|
results.report("times") do
TESTS.times do |i|
# do nothing
end
end
results.report("each_with_index") do
array.each_with_index do |element, index|
# Do nothing
end
end
end
Я получил результат, показанный ниже, на моем MacBook (Intel Core2Duo).
Rehearsal ---------------------------------------------------
times 1.130000 0.000000 1.130000 ( 1.141054)
each_with_index 7.550000 0.210000 7.760000 ( 7.856737)
------------------------------------------ total: 8.890000sec
user system total real
times 1.090000 0.000000 1.090000 ( 1.099561)
each_with_index 7.600000 0.200000 7.800000 ( 7.888901)