2013-11-20 6 views
1

Я чувствую, что это должно быть очень просто, и я просто натыкаюсь на стену.Выполнение действия до тех пор, пока не будет выполнено условие

Мне нужно пройти через массив до тех пор, пока не будет выполнено условие. Например:

count = 0  
array = ["","","test","demo"] 

Я хочу, чтобы этот массив увеличивал счетчик на 1 до тех пор, пока не будет найдено первое непустое значение. Поэтому я хочу значение индекса "test", но когда достигнуто "test", я хочу остановить цикл.

Кроме того, в качестве побочного примечания, как я могу просто найти индекс первого непустого значения в массиве? Я хочу знать оба метода, поскольку они оба имеют потенциальное применение.

ответ

6

Вы можете иметь оба :)

Это находит вам индекс первой непустой строки:

array = ["","","test","demo"] 
array.index {|str| !str.empty?} 
#=> 2 

Вы можете обновить подсчет в {|str| !str.empty?} -блоке, если вам нравится, потому что Array#index петля от начала до конца через массив.

FYI: Метод index является псевдонимом find_index

+0

Ой! вы были быстрее :) –

+0

всего на несколько секунд;) – tessi

1

лучше использования:

first_non_empty_index = array.index{ |string| !string.empty? } 
0

сделать/в то время как:

begin 
    puts arr[count] 
    count+=1 
end while(arr[count].empty?) 

puts count #2 
puts arr[count] #test 
+4

eeeewwww. полностью не идиоматический рубин –

+0

@mx Ruby поддерживает множество стилей: O (O) P, Функциональные и т. д. Какая такая свобода несет ответственность, поэтому, если вы хотите прокомментировать это, скажите что-то значимое (например: это медленнее, вы не можете используйте X с ним и т. д.), а не спам вроде: мне это не нравится, потому что это не так, как X. –

+2

Чтобы уточнить: Ruby DOES разрешает такие конструкции, но если вы придерживаетесь этого, я думаю, что вам не хватает точки языка , Ruby - все о выразительности, поэтому в этом отношении важно писать идиоматический код. Кроме того, ваш стиль кода вводит ненужную переменную в область (количество). который сказал, YMMV, извинения за правонарушение, это было не мое намерение –

Смежные вопросы