假设我有哈希{ "a" => "b", "c" => "d" }
,我想将其转换为字符串"a=b\nc=d"
。
到目前为止我提出的解决方案是
{ "a" => "b", "c" => "d" }.map { |k, v| k + "=" + v }.join("\n")
有更好/更优雅的方式吗?例如,是否可以使用单个方法调用来完成?
答案 0 :(得分:5)
任何提议的解决方案都可行。请记住,在ruby 1.9.1之前,哈希是无序的。如果您需要保持元素的顺序,请记住先排序。
{ "a" => "b", "c" => "d" }.sort.map{|k, v| "#{k}=#{v}" }.join("\n")
答案 1 :(得分:4)
不是更好,但我认为这会有效:
{ "a" => "b", "c" => "d" }.map { |a| a.join '=' }.join("\n")
答案 2 :(得分:3)
你的方式非常好。我会做一个小改动。
{ "a" => "b", "c" => "d" }.map{|k,v| "#{k}=#{v}" }.join("\n")
答案 3 :(得分:2)
到目前为止所提出的解决方案对我来说都很好。这是一个“未受束缚的”:
{ "a" => "b", "c" => "d" }.inject(""){ |str, kv| str << "%s=%s\n" % kv }
答案 4 :(得分:0)
主题有两个额外的旋转:
str = '' { "a" => "b", "c" => "d" }.each_pair{ |n,v| str << "#{n}=#{v}\n" } str # => "a=b\nc=d\n" str = '' { "a" => "b", "c" => "d" }.each_pair{ |*e| str << e.join('=') << "\n" } str # => "a=b\nc=d\n"
我在1.9.2上,所以哈希顺序保持不变,因为each_pair()会迭代它。
可以使用 Inject()
而不是附加到str字符串的末尾,但是我的大脑总是必须降档一两秒来解码注入正在做的事情。我更喜欢追加,特别是在第二个例子中,因为它没有"#{}"
线噪声。
如果你不想要尾随回车,那么@ba就有了我已经去过的地方,或者我所展示的快速str.chomp
。