배열에서 값 찾기


124

Ruby에서 배열에서 값을 어떻게 찾을 수 있습니까?


이런 유형의 질문에 대해 죄송합니다. 저는 여기 초보자이고이 도구를 사용하는 방법을 배우고 있습니다. 여기에 게시하기 전에 답변을 찾아 보겠습니다.
Lucas Renan

107
이런 종류의 질문에 대해 불평하는 모든 사람에게 : FAQ : '너무 사소하거나 너무 "초보자"라는 질문을 읽어보십시오. 질문이 마음에 들지 않으면 대답하지 말고 다른 사람이 그렇게하도록하십시오. 질문이 이미 질문되고 대답 되었다면 확실하게 중복으로 표시하십시오. 그러나 새로 온 사람들을 꾸짖을 이유가 없습니다.
Brian Campbell

답변:


117

특정 값이 배열 내부에 있는지 찾으려고 시도하고 있다고 생각하며, 그렇다면 Array # include? (value)를 사용할 수 있습니다.

a = [1,2,3,4,5]
a.include?(3)   # => true
a.include?(9)   # => false

다른 의미가 있다면 Ruby Array API를 확인하십시오.


1
Array # index를 사용하지만 Ruby Array API를 확인하는 것은 좋은 팁입니다.
Wylliam Judd 2016

82

를 사용 Array#select하면 기준을 충족하는 요소의 배열이 제공됩니다. 그러나 기준을 충족하는 배열에서 요소를 가져 오는 방법을 찾고 있다면 Enumerable#detect더 나은 방법이 될 것입니다.

array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3

그렇지 않으면 다음과 같이 어색한 작업을 수행해야합니다.

found = array.select {|e| e == 3}.first

감사! 나는 알고 Enumerable#select있었지만 #detect정확히 내가 찾던 것입니다.
저스틴 아드 킨스

1
array.select{}조건과 일치하는 항목을 찾는 배열의 모든 요소를 ​​살펴 봅니다. array.find대신 조건과 일치하는 첫 번째 요소를 반환합니다. 그래서 바람직한 사용 array.find{ |e| e == 3 }array.select{ |e| e == 3 }.first
오스카 곤잘레스

나는 당신 .find_index 이 어떤 것이 있는지 모르겠다는 것을 의미했다고 생각합니다.find
Ross Attrill

26

배열에서 하나의 값을 찾으려면 Array#find다음을 사용하십시오 .

arr = [1,2,6,4,9] 
arr.find {|e| e%3 == 0}   #=>  6

또한보십시오:

arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6              #=> true

값이 배열에 있는지 확인하려면 #in?ActiveSupport를 사용할 때도 사용할 수 있습니다 . #in?에 응답하는 모든 객체에 대해 작동합니다 #include?.

arr = [1, 6]
6.in? arr                 #=> true

Array#findRuby 참조에서 아무것도 볼 수 없습니다 . 다른 사람들이 언급 했으므로 Rails의 것이어야합니다. 흠 ....
Ross Attrill

1
@Ross Attrill 아니, 그것은에있어 Enumerable, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find
fangxing

ruby-doc이 포함 된 메서드와 상속 된 메서드를 보여 준다고 잘못 가정했습니다. 나에게 중요한 교훈.
Ross Attrill

23

이렇게?

a = [ "a", "b", "c", "d", "e" ]
a[2] +  a[0] + a[1]    #=> "cab"
a[6]                   #=> nil
a[1, 2]                #=> [ "b", "c" ]
a[1..3]                #=> [ "b", "c", "d" ]
a[4..7]                #=> [ "e" ]
a[6..10]               #=> nil
a[-3, 3]               #=> [ "c", "d", "e" ]
# special cases
a[5]                   #=> nil
a[5, 1]                #=> []
a[5..10]               #=> []

아니면 이것처럼?

a = [ "a", "b", "c" ]
a.index("b")   #=> 1
a.index("z")   #=> nil

설명서를 참조하십시오 .



16

사용하다:

myarray.index "valuetoFind"

원하는 요소의 인덱스를 반환하거나 배열에 값이 없으면 nil을 반환합니다.


9

이 답변은 수락 된 답변이 현재 작성된 질문을 다루지 않는다는 것을 알고있는 모든 사람을위한 것입니다.

질문은 배열에서 값 을 찾는 방법을 묻습니다 . 허용되는 대답은 값 배열에 있는지 확인하는 방법을 보여줍니다 .

이미을 사용한 예제가 있으므로이 방법을 index사용한 예제를 제공하고 select있습니다.

1.9.3-p327 :012 > x = [1,2,3,4,5]
  => [1, 2, 3, 4, 5] 
1.9.3-p327 :013 > x.select {|y| y == 1}
  => [1]

@MarkThomas 귀하가 주장하는 부분이 잘못된 진술이라고 내 답변을 인용 해 주시면 기꺼이 업데이트하겠습니다. 여기서는 영어를 사용한다고 가정합니다 (단어에 대한 정의를 구성하지 않음). 수천 명의 사람들이 Google에서 "배열에서 루비 찾기 값"을 검색 할 때이 질문을 첫 번째 결과로보고 있으므로 실제로 정답을 얻고 싶어 할 것입니다.
Mike S

1
또한 @MarkThomas가 맞다면이 질문은 stackoverflow.com/questions/1986386/…의 중복이기 때문에 닫아야 하지만 배열에서 "찾기"와 "존재 확인"사이에는 기능적 차이가 있습니다.
Mike S

나는 오래된 질문을 부활시키고 더 이상 물질을 거의 제공하지 않는 사람들에게 알레르기가 있습니다. 이것은 많이 발생합니다. 귀하의 경우 select2009 년에 이미 답변으로 제공 되었지만 좀 더 나은 샘플 스 니펫을 제공했습니다. 그래서 그것을 다시 생각한 후, 앞서 말한 것을 철회합니다.
Mark Thomas

8

이 질문에 이미 답이 있다는 것을 알고 있지만 몇 가지 기준에 따라 배열의 요소를 필터링하는 방법을 찾고 있습니다. 그래서 여기 내 솔루션 예가 있습니다.를 사용하여 select"RUBY_"로 시작하는 모든 상수를 클래스에서 찾습니다.

Class.constants.select {|c| c.to_s =~ /^RUBY_/ }

업데이트 : 그동안 Array # grep이 훨씬 더 잘 작동한다는 것을 발견했습니다. 위의 예에서는

Class.constants.grep /^RUBY_/

트릭을했다.


1
그 동안 나는 Array # grep이 훨씬 더 잘 작동한다는 것을 발견했습니다. 위의 예에서도 Class.constants.grep /^RUBY_/트릭을 수행했습니다.
mydoghasworms 2014 년

1

답장 해 주셔서 감사합니다.

나는 이렇게했다 :

puts 'find' if array.include?(value)

1

배열 방법으로 갈 수 있습니다.

모든 배열 방법을 보려면 배열 methods과 함께 함수를 사용하십시오 . 예를 들어,

a = ["name", "surname"] 
a.methods

그건 그렇고 당신은 배열의 값을 확인하기 위해 다른 방법을 사용할 수 있습니다 a.include?("name").

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.