Arrays 如何将对象数组映射到所需的散列数组格式,如[{';a';:';1';}、{';b';:';2';}]

Arrays 如何将对象数组映射到所需的散列数组格式,如[{';a';:';1';}、{';b';:';2';}],arrays,ruby,hash,Arrays,Ruby,Hash,如何将对象数组映射为以下所需格式 courses.map do |c| { 'name' : c.name, 'topic' : c.topic } end 其结果是 [{ :name => 'science', :topic => 'chapter 1'}, { :name => 'math', :topic => 'chapter 2'}] 但我想把它打印成这样 [{ 'name':'science', 'topic':'chapter 1

如何将对象数组映射为以下所需格式

courses.map do |c|
  {
    'name' : c.name,
    'topic' : c.topic
  }
end
其结果是

[{ :name => 'science', :topic => 'chapter 1'}, { :name => 'math', :topic => 'chapter 2'}]
但我想把它打印成这样

[{ 'name':'science', 'topic':'chapter 1'}, { 'name':'math', 'topic':'chapter 2'}]
PS:我试过:


  • 如果要将字符串用作哈希键而不是符号,可以:

    courses.map do|c|
    {
    'name'=>c.name,
    'topic'=>c.topic
    }
    终止
    
    结果:
    [{'name'=>'science','topic'=>'chapter 1'}]

    首先定义一个结构数组以进行说明

    S = Struct.new(:name, :topic) { }
    arr = [S.new('science', 'chapter 1'), S.new('math', 'chapter 2')]
    
    比如说,

    arr[0].name  #=> 'science'
    arr[1].topic #=> 'chapter 2'
    
    然后


    这与新旧哈希语法无关。无法将输出转换为新语法。它将始终使用旧语法。它可能需要一个JSON字符串。您可以使用
    .to_json

    使用
    对结果执行_json
    ,并将其传递给API端点

    [{:name=>'science',:topic=>'chapter 1'},{:name=>'math',:topic=>'chapter 2'}].to_json


    =>“[{name\”:“science\”,“topic\”:“chapter 1\”,{“name\”:“math\”,“topic\”:“chapter 2\”)”,

    我想要像[{'name':“science',“topic':“chapter 1'”,{'name':“math',“topic':“chapter 2'”=>应该被替换为:@AkashKinwad,这可能是不可能的,因为在Ruby
    {'a':1},等于
    {:a=>1}
    。那么,为什么您必须使用
    {'a':1}
    格式呢?我必须调用第三方API,它具有固定的URL模式。如果您想要的最终结果是字符串,您可以查看Cary Swoveland的另一个答案,您想生成JSON吗?
    '[' +
    arr.map { |inst| "{ 'name':'#{inst.name}', 'topic':'#{inst.topic} }" }
       .join(', ') +
    ']'
      #=> "[{ 'name':'science', 'topic':'chapter 1 }, { 'name':'math', 'topic':'chapter 2 }]"