我有一个哈希,
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
到它的值,我想知道为什么会这样。
答案 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"]