Существует ли версия Ruby для цикла, подобных тому на Java/C++?

Кнопка Open в Файле Открытое диалоговое окно имеет немного вниз стрелка рядом с ним. Нажмите это, и Вы получаете опцию "Open With", которая включает Двоичного Редактора. Как парень системного типа, я нахожу это довольно ценным, но большинство моих коллег не знало об этом, пока я не показал им.

10
задан ryanprayogo 9 December 2009 в 05:32
поделиться

7 ответов

Да, вы можете использовать each_with_index

collection = ["element1", "element2"]
collection.each_with_index {|item,index| puts item; puts index}

переменная index дает вам индекс элемента во время каждой итерации

11
ответ дан 3 December 2019 в 13:24
поделиться

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

Все эти примеры предоставляют ту же функциональность

15
ответ дан 3 December 2019 в 13:24
поделиться

Как насчет шага ?

0.step(1000,2) { |i| puts i }

эквивалентен:

for (int i=0; i<=1000; i=i+2) {
    // do stuff
}
10
ответ дан 3 December 2019 в 13:24
поделиться

В 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 для каждой итерации цикла.

5
ответ дан 3 December 2019 в 13:24
поделиться

Вы можете использовать каждый с индексом .

1
ответ дан 3 December 2019 в 13:24
поделиться

, когда мне просто нужны числа (и я не хочу повторять), я предпочитаю следующее:

(0..10000).each do |v|
    puts v
end
1
ответ дан 3 December 2019 в 13:24
поделиться

раз рекомендуется вместо 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)
1
ответ дан 3 December 2019 в 13:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: