2010-08-03 1 views
1

У меня есть регулярное выражение, которое возвращает несколько переменных в соответствие. Я заинтересован в первой непустой переменной в подмножество индексов в пределах матча, поэтому я используюРубин: Сокращение для [1] || a [3] || a [6] ...?

result = a[1] || a[3] || a[6] || ... 

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

ответ

2

Используйте values_at для получения массива, который содержит только элементы по указанным индексам. Затем используйте find {|x| x}, чтобы получить первый элемент, который не равен нулю или false.

result = a.values_at(*indices).find {|x| x} 
+1

вопрос сказал ненулевым, поэтому, предполагая, что означает, что плохие значения 'nil', это может быть упрощено до' a.values_at (* индексы) .compact .first'. –

+0

Сохраняет ли 'compact' гарантию на порядок? – shmichael

3

Другой способ:

result = [1,3,6].find {|x| a[x]} 
+0

На самом деле это должно быть 'a [[1,3,6] .find {| x | a | x |}], что немного менее эстетично. – shmichael