如何在Ruby中格式化哈希的输出?

时间:2013-11-13 00:01:16

标签: ruby hash formatting

我正在经历测试优先的Ruby问题,正在处理问题11,字典。 spec文件中的最终测试请求以特定格式打印散列(单词及其定义)的所有键和值。

我该怎么做?这种类型的输出是否有特定名称?我无法理解如何使输出看起来像这样或所有额外的符号意味着什么。

it 'can produce printable output like so: [keyword] "definition"' do
  @d.add('zebra' => 'African land animal with stripes')
  @d.add('fish' => 'aquatic animal')
  @d.add('apple' => 'fruit')
  @d.printable.should == %Q{[apple] "fruit"\n[fish] "aquatic animal"\n[zebra] "African land animal with stripes"}
end

当我运行该方法并正常返回哈希时,它会说:

expected: "[apple] \"fruit\"\n[fish] \"aquatic animal\"\n[zebra] \"African land animal with stripes\""

太平洋时间下午6:38更新

我无法回答我自己的问题,所以这是我的解决方案:

首先尝试:

def printable
    print_string = ""
    @hash1.sort.each do |k,v|
        print_string = print_string + "[" + k + "]" + " " + "#{v.to_s}" + "\n"
    end
    print_string.chomp
end

它返回了大部分正确的答案,但我无法弄清楚如何获得关于单词定义的引用:

=> “[苹果]水果\ [鱼]水生动物\ n [斑马]非洲陆地动物有条纹”

我尝试使用spec doc中的%Q {}包装器来解决引号问题。然后我重写了变量的符号等,如下所示。

这是我最终提出的答案:

def printable
  printable_string = ""
  @hash1.sort.each do |k,v|
    printable_string = printable_string + %Q{[#{k}] "#{v}"\n}
  end
  return printable_string.chomp
end

它返回正确的答案:

=> “[苹果] \”水果\ \ \ [鱼] \“水生动物\ \ \ [斑马] \”非洲陆地动物有条纹\“”

2 个答案:

答案 0 :(得分:1)

您可以像这样迭代哈希

d.each do |key,value|
    puts key
    puts value
end

答案 1 :(得分:0)

此问题的目的是了解如何循环哈希的键和值以及如何进行字符串插值。您应该可以使用以下提示来完成此操作:

Hash#each

string interpolation in ruby