DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
Array To Hash In Ruby
Inspired by <a href="http://www.fivesevensix.com/articles/2005/05/20/array-to_h">something</a> Ryan Carver was trying to do:
a = [1, 2, 3]
Hash[*a.collect { |v|
[v, v*2]
}.flatten]It's not as foolproof as his solution, however!






Comments
Snippets Manager replied on Wed, 2011/08/10 - 3:30pm
Snippets Manager replied on Thu, 2009/10/15 - 4:28pm
class Array def to_hash(other) Hash[ *(0...self.size()).inject([]) { |arr, ix| arr.push(self[ix], other[ix]) } ] end end %W{ a b c }.to_hash( %W{ 1 2 3 } ) #=> {"a"=>"1", "b"=>"2", "c"=>"3"}Snippets Manager replied on Wed, 2009/05/13 - 11:43am
Snippets Manager replied on Wed, 2009/02/04 - 7:36am
Hash[*a.collect { |v| [v, v*2] }.flatten]I dont understand that and i cannot sleep until I know what it is for.Snippets Manager replied on Tue, 2008/05/06 - 3:14pm
class Array def flatten_once inject([]) { |v, e| v.concat(e)} end endSnippets Manager replied on Tue, 2008/05/06 - 3:14pm
Snippets Manager replied on Thu, 2007/10/04 - 1:13pm
class Array def flatten_once returning([]) {|ary| each{|x| ary.concat x}} end endSnippets Manager replied on Mon, 2008/01/21 - 6:03pm
class << Hash def create(keys, values) self[*keys.zip(values).flatten] end endgives:>> Hash.create(['a', 'b', 'c'], [1, 2, 3]) => {"a"=>1, "b"=>2, "c"=>3}Snippets Manager replied on Wed, 2007/05/16 - 7:54pm
>> id_list = (21..31).to_a => [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] >> products_ids = [24, 29, 30, 32] => [24, 29, 30, 32] >> results = Hash[*id_list.collect {|v| [v, products_ids.include?(v)]}.flatten] => {27=>false, 22=>false, 28=>false, 23=>false, 29=>true, 24=>true, 30=>true, 25=>false, 31=>false, 26=>false, 21=>false} >> results.each_pair {|k,v| puts "Key: #{k} is true!" if v == true} Key: 29 is true! Key: 24 is true! Key: 30 is true!Snippets Manager replied on Thu, 2007/03/29 - 8:30am
class Array def to_hash_keys(&block) Hash[*self.collect { |v| [v, block.call(v)] }.flatten] end def to_hash_values(&block) Hash[*self.collect { |v| [block.call(v), v] }.flatten] end endThen I can do this for example:>> a = ["able", "baker", "charlie"] >> a.to_hash_values {|v| a.index(v)} => {0=>"able", 1=>"baker", 2=>"charlie"}Snippets Manager replied on Mon, 2012/05/07 - 2:12pm
class Array def to_h(&block) Hash[*self.collect { |v| [v, block.call(v)] }.flatten] end endSnippets Manager replied on Mon, 2012/05/07 - 2:12pm