如何将哈希键和值添加到字符串

时间:2017-07-10 07:03:00

标签: ruby hash

我有一个哈希,

hash = {"a" => 100, "b" => 200, "c" => 300}

并希望将其键和值添加到字符串中。

我有以下代码:

result_string = ''
hash.each do |key, value|
    result_string += 'key: '
    result_string += key
    result_string += ', value: '
    result_string += value
    result_string += ', '
end

结果将是:

"key: a, value: 100, key: b, value: 200, key: c, value: 300,"

此代码会将当前密钥添加到字符串中。但是,它没有解析value到它的值,我想知道为什么会这样。

4 个答案:

答案 0 :(得分:3)

至于为什么你的代码不起作用 - 如果你试图运行它,你就会得到

  

TypeError:没有Fixnum隐式转换为String

这是因为您尝试将一个数字(您的值)添加到字符串中。要修复它,您可以显式地将键和值转换为字符串。所以

result_string += key

变为

result_string += key.to_s

result_string += value

变为

result_string += value.to_s

答案 1 :(得分:2)

有一种更简单的方法:

hash.map { |key, value| "key: #{key}, value: #{value}" }.join(', ')
#=> "key: a, value: 100, key: b, value: 200, key: c, value: 300"

答案 2 :(得分:1)

hash.map(&%w|key:\  value:\ |.method(:zip))
    .map { |e| e.map(&:join).join(', ') }
    .join(', ')
#⇒ "key: a, value: 100, key: b, value: 200, key: c, value: 300"

回答你的问题:问题出在result_string += value,人们不能只在+的字符串中添加一个整数,应该提前强制执行:

result_string += value.so_s

答案 3 :(得分:-1)

有很多方法可以实现这一目标。这个怎么样...假设你有一个哈希,那么你可以通过map遍历它。

h = {foo: "bar", batz: "boo"}
h.map { |key, vakue| "key: #{key}, value: #{value}" }
在这种情况下,

会生成您正在寻找的字符串数组:["key: foo, value: bar", "key: batz, value: boo"]