From: Chris White Date: 2011-09-10T02:05:15+09:00 Subject: Re: Creating a hash from two arrays > Hi. Can anyone help with this? I'd like to end with a hash like so: >  > hash = {{"A" => 'alpha'}, {'B' => 'bravo'}} etc... >  >  >  > I'm not sure whether I can use group_by and how to handle case > insensitity. Cheers for any help. >  >  >  > irb(main):001:0> s = ('A'..'Z').to_a > => ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", > "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"] >  > irb(main):003:0> t = %w(alpha bravo Charlie Zebra) > => ["alpha", "bravo", "Charlie", "Zebra"] I will suggest something different based on what you wish to do. This uses inject: ---t = %w(alpha bravo Charlie Zebra) result = t.inject(Hash.new) do | words, word |  first_letter = word[0].upcase  words[first_letter] = word  wordsend--- result looks like this: {"A"=>"alpha", "B"=>"bravo", "C"=>"Charlie", "Z"=>"Zebra"}  Now, if there's a chance that words with start with the letter A, or any other letter might occur, I instead recommend an array based approach: ---t = %w(alpha bravo Charlie Zebra) result = t.inject(Hash.new) do | words,word |  first_letter = word[0].upcase  if words.has_key? first_letter    words[first_letter] << word  else    words[first_letter] = [word]  end  wordsend--- result produces: {"A"=>["alpha"], "B"=>["bravo"], "C"=>["Charlie"], "Z"=>["Zebra"]}   In both cases, the first letter is uppercased to handle being case insensitive. Let me know if you have any questions regarding this, or if you have a different problem you are trying to solve. Best Regards,Chris White