2015-01-27 1 views
1

Как я могу получить массив всех индексов массива, если условия его элементов выполнены. Например:Получить индекс массива, если какое-либо условие выполнено в Ruby

a = [32, 35, 68, 44, 8, 45] 

метод Лобовое должен возвращать массив [2, 3, 5] с условием> 35.

+0

'результат = []; a.each.with_index {| e, i | result << i if e > 35} ' – iamnotmaynard

+0

@iamnotmaynard - было бы больше Rubyish, чтобы построить массив с' inject' вместо того, чтобы наращивать его пошагово в цикле. Что-то вроде этого: 'result = a.each_with_index.inject ([]) {| r, (e, i) | e> 35? r + [i]: r} ' –

ответ

4

Это, вероятно, дубликат, но быстрый поиск ничего не нашел.

Самый простой способ возможно использовать each_with_index:

irb(main):001:0> a=[32,35,68,44,8,45] #=> [32, 35, 68, 44, 8, 45] 
irb(main):002:0> a.each_with_index.select { |n,i| n > 35 }.map &:last  
=> [2, 3, 5] 
+0

Марк, если бы вы были на 10 секунд позже :) – gkolan

+0

Альтернатива:' a.map.with_index {| n, i | n> 35? i: nil} .compact' – Phrogz

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