Ruby 哈希:类型转换

Ruby Hash: type casting

我正在努力更好地掌握 Ruby 中的写作以及使用哈希表及其值。

1. 假设你有一个散列:

‘FOO’= {‘baz’ => [1,2,3,4,5]}

目标:将每个值以‘Ruby’的方式转换为字符串。

我遇到过多个使用 .each 的例子。

FOO.each = { |k,v| FOO[k] = v.to_s } 

但是,这会呈现封装在字符串中的数组。例如。 "[1,2,3,4,5]" 应该是 ["1", "2", "3", "4", "5"]

2. 对包含值数组的哈希执行类型转换时,结果是一个新数组吗?或者只是值类型的更改(例如,当应用 .to_s 时,1 变为“1”(假设值是通过上面的 each 枚举器放置的)。

非常感谢您的解释。 Ruby 的新手。

在每个块中,kv是键值对。在您的情况下,'baz' 是关键,[1,2,3,4,5] 是价值。因为你在做 v.to_s,它会将整个数组转换为字符串而不是单个值。

你可以做这样的事情来实现你想要的。

foo = { 'baz' => [1,2,3,4,5] }
foo.each { |k, v| foo[k] = v.map(&:to_s) }

您可以使用 Hash#transform_values:

foo = { 'baz' => [1, 2, 3, 4, 5] }                                     
foo.transform_values { |v| v.map(&:to_s) } #=> {"baz"=>["1", "2", "3", "4", "5"]}