2013-12-19 3 views
1

배열의 문자열이 &이고 배열을 반복하여 배열의 일부 요소와 일치하는지 확인하려고합니다.Ruby에서 배열의 요소와 문자열의 일치 부분

string = "HOPJYJKCONNECTICUTQZIDAHOKR" 

states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"] 

문자열에서 모든 일치 항목을 찾을 수 있도록 states_array를 반복 처리하려면 어떻게해야합니까? 나는 출력 & 그래서 최종 결과의 모양에 배열로 모든 일치하는 상태 싶은 : 매트로

#=> ["CONNECTICUT", "IDAHO"] 
+1

은' "텍사스", "알래스카",'하지' "텍사스", "알래스카"이어야한다' – steenslag

+0

귀하의 코멘트에 구문 오류가 심각 ...이? – Cilan

+0

@PeterAlfvin 저는 질문에서'# => [ "CONNECTICUT", "IDAHO"]'를 말하고 있습니다. – Cilan

답변

5
string = "HOPJYJKCONNECTICUTQZIDAHOKR" 
states = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"] 

states.select { |s| string[s] } 
# => ["IDAHO", "CONNECTICUT"] 
+0

우수. 고맙습니다. 이 새로운 & 문자열의 일치하기 전에 배열의 각 요소를 반복 할 경우 확실하지 않았습니다. 매우 감사! – BandanaKM

2

멋진 솔루션을하지만 당신은 지정 이후도

states.select { |s| string.match(s)} 
+3

또는'states.select {| s | string.include? s}'하지만 기본적으로 같은 것입니다. – toniedzwiedz

1

을 수행 할 수 있습니다 이 질문에 정규 표현식 태그를 사용하면 다음과 같이 정규식을 사용하여 다음과 같이 할 수 있습니다.

string.scan(Regexp.new(states.join('|'))) 
# => ["CONNECTICUT", "IDAHO"] 

매트의 대답에있는 변수를 사용합니다. 그러나 이것을 권장하지는 않습니다. :-)

+0

좋은 포인트 : (1) OP는 정규식을 지정했습니다. (2) 이것은 OP와 같은 순서로 답을 준다. +1 – Matt

+0

감사하지만 "OP와 동일한 주문"이 무슨 뜻인지 확실하지 않습니다. 사실, 질문을 검토하면서, OP는 "국가 반복"에 대해 질문합니다. 이것은하지 않습니다. ;-) –

+0

답 '[ "CONNECTICUT", "IDAHO"]'는 OP와 같은 순서로 정렬되며, 이는'string '과 동일합니다. – Matt

0

이것은 내장 된 방법 union을 사용하는 @ Peter_Alvin의 대답과 같습니다.

states_array = ["TEXAS", "ALASKA", "IDAHO", "FLORIDA", "MONTANA", "OHIO", "NEWMEXICO", "CONNECTICUT", "COLORADO"] 
str = "HOPJYJKCONNECTICUTQZIDAHOKR" 
p str.scan(Regexp.union(states_array)) # ["CONNECTICUT", "IDAHO"] 
관련 문제