2014-06-24 80 views
1

這可能很簡單,但我不知道Ruby的所有數組函數。Ruby數組的二維數組,搜索/查找?

如果我有一個給定的陣列,如:

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

我想有兩個功能:

  • 一個功能是,當我給它 「B」,給了我3
  • 反過來,當我給它3的一個函數給了我「b」。

必須有一個簡單的方法?

+2

當詢問代碼時,顯示您嘗試過的內容非常重要,並描述爲什麼它沒有按照您的要求做。請參閱[「On-topic」常見問題解答]中的#3(http://stackoverflow.com/help/on-topic)。因爲你沒有這樣做,所以你的問題在技術上是無關緊要的,所以你可能想立即解決。 –

回答

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

呀哈希就是答案,如果你不當然沒有重複的鍵。否則,你可以使用陣列#assoc命令#rassoc其中分別搜索相匹配的第一個和最後一個元素的數組的數組:

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] 

注:這些方法返回的第一個匹配的數組,不是所有的人。

多見於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" 

當然,這些都不涉及多個值。