有没有办法将散列平铺成字符串,在键和值之间以及键/值对之间使用可选的分隔符?

例如,print {:a => :b, :c => :d}.flatten('=','&')应该打印a=b&c=d

我写了一些代码来实现这一点,但我想知道是否有更简洁的方法:

class Hash
  def flatten(keyvaldelimiter, entrydelimiter)
    string = ""
    self.each do
      |key, value|
      key = "#{entrydelimiter}#{key}" if string != "" #nasty hack
      string += "#{key}#{keyvaldelimiter}#{value}"  
    end
    return string
  end
end

print {:a => :b, :c => :d}.flatten('=','&') #=> 'c=d&a=b'

谢谢

推荐答案

我不会覆盖.flatten,它已经被定义为:

返回一个新数组,该数组是

这是我所知道的最简单的方法:

{:a => 100, :b => 200}.map{|k,v| "#{k}=#{v}"}.join('&')
# => "a=100&b=200"

Ruby相关问答推荐

如何修复 '535-5.7.8 用户名和密码未被接受.在 Devise 邮件确认错误中了解更多信息?

使用 Ruby 仅删除数组中的特定重复项

多线程期间的 MRI ruby​​ 内存访问特性

从 URL 字符串中提取主机的 Ruby 代码

获取字符串中的最后一个字符

如何拯救 Ruby 中的 eval?

Ruby:将unix时间戳转换为日期

如何在两个浮点数之间的范围内最好地创建一个随机浮点数

如何在没有继承方法的情况下获取类的公共方法?

Rails 在最后一个之前加入逗号和and的字符串列表

Ruby 模板:如何将变量传递到内联 ERB?

当我将参数传递给脚本时,使用 gets() 会出现没有这样的文件或目录错误

Xcode - 配置:错误:在 $PATH 中找不到可接受的 C 编译器

如何在 macOS 上卸载 rbenv?

如果公司使用 C++、C# 或 Java 作为应用程序语言,为什么要学习 Perl、Python、Ruby?

Ruby哈希中的条件键/值

您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.0

如何使用 minitest 运行所有测试?

如何判断数组是否有重复项?

如何在 Capistrano v3 的服务器上运行 shell 命令?