2012-09-12 9 views
6

Witam mam mały funkcję rubinowy, że dzieli się tablicę Ruby następująco: -wyszukiwania Ruby tablic z Regex wyrażeń

def rearrange arr,from,to 
    sidx = arr.index from 
    eidx = arr.index to 
    arr[sidx] = arr[sidx+1..eidx] 
end 

arr= ["Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange", "Purple", "Pink", "White", "Black"] 
start = "Yellow" 
stop = "Orange" 

rearrange arr,start,stop 
puts arr.inspect 
#=> ["Red", "Green", "Blue", ["Cyan", "Magenta", "Orange"], "Cyan", "Magenta", "Orange", "Purple", "Pink", "White", "Black"] 

muszę korzystanie użyć regex wyraz w moim początku i na przykład zatrzymać wyszukiwania

Start = "/ Yell /"

stop = "/ Ora /"

Czy istnieje prosty sposób yo zrobić to w Ruby?

Odpowiedz

17

Oczywiście metoda index może otrzymać blok, tak, że można zrobić

sidx = arr.index{|e| e =~ from } 

Można nawet sprawdzić operatora ładnej Ruby „Równość przypadek” i łatwo pokryć oba ciągi i regexes jako argumenty:

sidx = arr.index{|e| from === e} # watch out: this is not the same as 'e === from' 

Następnie, jeśli przejdą regex jako from będzie wykonać regex mecz, a jeśli zdać String, to będzie wyglądać na dokładnym ciąg.

+0

Znakomity! Bardzo dobrze. Działa świetnie. Dzięki za opinie. – user1513388

+4

@ user1513388 Proszę [zaakceptuj odpowiedź] (http://meta.stackexchange.com/a/5235), jeśli problem został rozwiązany. –