2014-06-24 7 views
1

이것은 매우 간단 할 수 있지만 Ruby의 모든 배열 함수를 모른다. 나는 같은 지정된 배열이있는 경우2 차원 배열의 루비 배열, 검색/조회?

:

values = [["a", 1], ["b", 3], ["c", 7], ... etc ] 

을 나는 두 가지 기능 싶습니다

  • 함수 나 "B"를주고, 나에게 3
  • 을 제공합니다 다른 방법은, 내가 3을 줄 때 "b"를주는 함수.

쉬운 방법이 있어야합니까?

+2

코드를 요청할 때 시도한 것을 보여주고 왜 그것이 원하는대로하지 않는지 설명하는 것이 중요합니다. [ "주제"FAQ] (http://stackoverflow.com/help/on-topic)의 3 번을보십시오. 당신이 그렇게하지 않았기 때문에 귀하의 질문은 기술적으로 주제와 관련이 없으므로 바로 그 문제를 해결할 수 있습니다. –

답변

1
hash = array.to_h => Converts your array to a hash 
hash[key] = value => Get the value associated with the key 
hash.invert[key] = value => This method inverts your hash and you can select values 
+0

고마워, options_for_select에 대한 것이었지만, 이제는 해시도 걸릴 수 있다는 것을 알았습니다. 이중 배열은 필요 없습니다. – bobomoreno

2
Hash[values]["b"] # => 3 
Hash[values.map(&:reverse)][3] # => "b" 
2

첫 번째로 해시에 배열을 변환하여, 달성하기 쉬운 :

value_hash = Hash[values] 

와 함께이 액세스 : 다른 방법을

value_hash['b'] # => 3 

주위에 내가 먼저 것 고유 한 요청인지 확실하게 알고 싶습니까? 그래서 'a', 'b', 'c', ... 그리고 1,3,7 ... 등이 독특합니까?

2

첫 번째 질문은 다음과 같습니다. 배열이어야합니까? Hash은이를 위해 설계되었으며 키/값 조회가 내장되어 있습니다.

당신은 수행하여 배열에서 해시를 만들 수 있습니다

hash = Hash[values] 

그리고 반대의 경우 hash["a"] # => 1

를 사용하십시오 hash.key(1) # => "a"

+0

배열에 짝수 개의 요소가 포함되어있는 한 배열에서 해시를 만들 수 있습니다. 홀수 번호의 요소는 키로 취급되고 짝수 번호의 요소는 값으로 처리됩니다. –

+0

@theTinMan 완전히 사실입니다. 이 가정은 OP의 예를 기반으로합니다. – CDub

+0

글쎄, OP는 배열로부터 해시를 생성 할 수 있다는 것을 몰랐다. 따라서 배열이 짝수 개의 요소 여야한다는 규정도 알 수 없었다. –

1

그래 해시 대답은, 당신의 경우 돈 물론 중복 키가 없습니다.

ary = [["A", 1], ["B", 2], ["C", 3], ["D", 4], ["E", 5], ["F", 6], ["G", 6]] 
ary.assoc('A') => ["A", 1] 
ary.rassoc('3') => ["C", 3] 

참고 : 그렇지 않으면 당신이 각각 첫 번째와 마지막 요소와 일치하는 배열의 배열을 검색 배열 #의 ASSOC 번호의 rassoc를 사용할 수있는이 방법은 그들 모두를 일치하는 첫 번째 배열을하지 반환합니다.

http://www.ruby-doc.org/core-2.1.2/Array.html

0

에서 나는 하나의 값을 찾을 수 해시를 만드는 어떤 점을 볼 참조하십시오. 단순하고 직접적인 접근 방식은 어떨까요?

values = [["a", 1], ["b", 3], ["c", 7]] 

values.find { |l,n| l=='b' }.last #=> 3 
values.find { |l,n| n==3 }.first #=> "b" 

물론 여러 값을 다룰 수 없습니다.