這可能很簡單,但我不知道Ruby的所有數組函數。Ruby數組的二維數組,搜索/查找?
如果我有一個給定的陣列,如:
values = [["a", 1], ["b", 3], ["c", 7], ... etc ]
我想有兩個功能:
- 一個功能是,當我給它 「B」,給了我3
- 反過來,當我給它3的一個函數給了我「b」。
必須有一個簡單的方法?
這可能很簡單,但我不知道Ruby的所有數組函數。Ruby數組的二維數組,搜索/查找?
如果我有一個給定的陣列,如:
values = [["a", 1], ["b", 3], ["c", 7], ... etc ]
我想有兩個功能:
必須有一個簡單的方法?
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
謝謝,它是用於options_for_select的,但現在我意識到這也可以採用散列,因此不需要雙數組。 – bobomoreno
Hash[values]["b"] # => 3
Hash[values.map(&:reverse)][3] # => "b"
首先是容易實現的,通過你的陣列轉換成散列:
value_hash = Hash[values]
而且隨着訪問此:
value_hash['b'] # => 3
對於周圍的其他方法我會第一想知道您是否確定這是一項獨特的要求?那麼'a','b','c',...和1,3,7等都是獨特的嗎?
呀哈希就是答案,如果你不當然沒有重複的鍵。否則,你可以使用陣列#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]
注:這些方法返回的第一個匹配的數組,不是所有的人。
我看到在創造一個哈希查找一個值是沒有意義的。爲什麼不是簡單直接的方法?
values = [["a", 1], ["b", 3], ["c", 7]]
values.find { |l,n| l=='b' }.last #=> 3
values.find { |l,n| n==3 }.first #=> "b"
當然,這些都不涉及多個值。
當詢問代碼時,顯示您嘗試過的內容非常重要,並描述爲什麼它沒有按照您的要求做。請參閱[「On-topic」常見問題解答]中的#3(http://stackoverflow.com/help/on-topic)。因爲你沒有這樣做,所以你的問題在技術上是無關緊要的,所以你可能想立即解決。 –