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



我有一个哈希,

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解决其价值,我想知道为什么会这样。

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

TypeError:没有将Fixnum隐式转换为String

这是因为您尝试将数字(您的值(添加到字符串中。若要修复此问题,可以显式将键和值转换为字符串。所以

result_string += key

成为

result_string += key.to_s

result_string += value

成为

result_string += value.to_s

有一个更简单的方法:

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

有几十种方法可以实现这一点。这个怎么样...假设你有一个哈希值,那么你可以通过地图遍历它。

h = {foo: "bar", batz: "boo"}
h.map { |key, vakue| "key: #{key}, value: #{value}" }

在这种情况下,会生成您要查找的字符串数组:["key: foo, value: bar", "key: batz, value: boo"]

最新更新