Как считать в цикле? - PullRequest
       4

Как считать в цикле?

4 голосов
/ 06 января 2011

Я новичок в Ruby, как я могу считать элементы в цикле? На Java я бы написал так:

int[] tablica = { 23,53,23,13 };
int sum = 0;
for (int i = 0; i <= 1; i++) { // **only first two**
    sum += tablica[i];
}
System.out.println(sum);

РЕДАКТИРОВАТЬ: Я хочу только первые два

Ответы [ 5 ]

5 голосов
/ 06 января 2011

Вы можете суммировать все элементы в массиве следующим образом:

arr = [1,2,3,4,5,6]
arr.inject(:+)
# any operator can be here, it will be
# interpolated between the elements (if you use - for example
# you will get 1-2-3-4-5-6)

Или, если вы хотите перебрать элементы:

arr.each do |element|
    do_something_with(element)

Или, если вам нужен индекс тоже:

arr.each_with_index do |element, index|
    puts "#{index}: #{element}"
4 голосов
/ 06 января 2011
tablica.take(2).reduce(:+)

А если серьезно? Что не так с

tablica[0] + tablica[1]

Эй, это даже работает в Ruby и Java & hellip; и C, C ++, Objective-C, Objective-C ++, D, C #, ECMAScript, PHP, Python. Без изменений.

1 голос
/ 06 января 2011

Есть много способов, но если вы хотите, чтобы текущий объект и счетчик использовали метод each_with_index

some_collection.each_with_index do |o, i|
  # 'o' is your object, 'i' is your index
end

РЕДАКТИРОВАТЬ: Ой, прочитайте это слишком быстро. Вы можете сделать это

sum = 0
some_collection.each { |i| sum += i }
1 голос
/ 06 января 2011

С Enumerable # inject :

tablica = [23, 53, 23, 13]
tablica.inject(0, :+) # 112
1 голос
/ 06 января 2011

Если вам просто нужна сумма, вот простой способ:

tablica = [ 23,53,23,13 ]
puts tablica.inject(0){|sum,current_number| sum+current_number}

Для первых двух элементов (или любого другого непрерывного диапазона) вы можете использовать диапазон:

tablica = [ 23,53,23,13 ]
puts tablica[0..1].inject(0){|sum,current_number| sum+current_number}

Что это делает:

  1. Блок (оператор внутри {...}) вызывается внутренне inject, один раз для каждого элемента в массиве.
  2. На первой итерации,sum имеет начальное значение 0 (которое мы передали inject) И current_number содержит 0-й элемент в массиве.
  3. Мы добавляем два значения (0 и 23) и это значениеКогда блок возвращается, ему присваивается значение sum.
  4. Затем на следующей итерации мы получаем переменную sum равную 23 и current_number как 53. И процесс повторяется.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...