2015-05-21 2 views
-2

Как я могу превратить эти два списка строк в аргументы ключевых слов?Превращение двух списков строк в аргументы ключевых слов

["foo", "bar", "fizz"], ["1", "2", "buzz"] 

в

(foo: "1", bar: "2", fizz: "buzz") 
+0

Вы не можете этого сделать. Это не объект. Или, вы имеете в виду, как передать такие параметры методу? – sawa

+0

Результат поиска недействителен –

+0

Вы имеете в виду: {foo: "1", bar: "2", fizz: "buzz"}? Или вы хотите строку с parens: '(foo: "1", bar: "2", fizz: "buzz")'? –

ответ

5

Вы можете хэширования два списка:

a = ["foo", "bar", "fizz"] 
b = ["1", "2", "buzz"] 
res = Hash[a.zip b] 

res будет: {"foo"=>"1", "bar"=>"2", "fizz"=>"buzz"}

+0

Почему downvote? – Mureinik

+2

Вы никогда не узнаете. (Может быть, потому, что вы не изменили ключи на символы, что тривиально.) Такова жизнь. –

+2

Хотя SO говорит, что вы должны прокомментировать, почему вы делаете downvote. Это часть любезности сообщества. –

-1

words = ["foo", "bar", "fizz"]

integers = ["1","2","3"]

Вы можете попробовать это: Hash[words.zip(integers)]

+0

Или 'words.zip (целые числа) .to_h' в новом Ruby. –

+0

Обратите внимание, что целые числа OP являются фактически строками. –

+0

... для преобразования в символы. –

2

Если вы хотите изменить строки в символы и сделать хэш из этого, вы можете сделать:

strings = ["foo", "bar", "fizz"] 
symbols = strings.map(&:to_sym) 
integers = ["1","2","3"] 

Hash[symbols.zip(integers)] 

Вы получите {foo: "1", bar: "2", fizz: "buzz"} по желанию ,

+1

Почему вы хотите [сделать хэш этого] (http://en.wiktionary.org/wiki/make_a_hash_of)? –

0

Не так чисто, как другие ответы, но это работает .. и преобразуется в символы. Аарон-кодирование обеспечило хороший сокращенный путь!

w = ["foo", "bar", "fizz"] 
w2 = ["1", "2", "buzz"] 
c = 0 
h = Hash.new { |hash, sym| hash[sym] } 

w.each do |x| 
    h[x.to_sym] = w2[c] 
    c += 1 
end 

puts h 
Смежные вопросы