【问题标题】:Ruby merge two arrays in specific orderRuby按特定顺序合并两个数组
【发布时间】:2021-02-27 14:03:43
【问题描述】:

我正在尝试使用来自 json 对象的 s3api cli 为 aws put-object-tagging 创建“TagSet”。我已经将 json 解析为散列,这是我在实现最终目标方面取得的最大成功。

示例 json:

{ "key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4", "key5": "value5" }

最终目标示例:

'{"TagSet": [{ "Key": "key1", "Value": "value1" }, { "Key": "key2", "Value": "value2"}, { "Key": "key3", "Value": "value3"}, { "Key": "key4", "Value": "value4"}, { "Key": "key5", "Value": "value5"}]}'

到目前为止,我已经将 json 解析为哈希,然后使用以下方法将键和值拆分为 2 个数组:

json = '{ "key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4", "key5": "value5" }'

new_hash = JSON.parse(json)
keys = new_hash.keys
values = new_hash.values
my_keys = []
my_vals = []


keys.each do |k|
  my_keys << "--Key " + k.to_s
end

values.each do |v|
  my_vals << "--Value " + v.to_s
end

我想我可以遍历每个数组并将它们插入到单个数组中。但我得到的输出是一个递归列表,其中包含与每个值重复的所有键。

output = []
 my_keys.each do |x|
  my_vals.each do |y|
    output << x + " " + y
  end
end

哪个输出:

--Key key1 --Value value1
--Key key1 --Value value2
--Key key1 --Value value3
--Key key1 --Value value4
--Key key1 --Value value5
--Key key2 --Value value1
--Key key2 --Value value2
--Key key2 --Value value3
--Key key2 --Value value4
--Key key2 --Value value5
--Key key3 --Value value1
--Key key3 --Value value2
--Key key3 --Value value3
--Key key3 --Value value4
--Key key3 --Value value5
--Key key4 --Value value1
--Key key4 --Value value2
--Key key4 --Value value3
--Key key4 --Value value4
--Key key4 --Value value5
--Key key5 --Value value1
--Key key5 --Value value2
--Key key5 --Value value3
--Key key5 --Value value4
--Key key5 --Value value5

如有任何关于如何创建此 TagSet 的建议,我们将不胜感激!

【问题讨论】:

    标签: arrays ruby hash aws-cli s3-object-tagging


    【解决方案1】:
    require 'json'
    
    json = '{ "key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4", "key5": "value5" }'
    
    
    tagset = JSON.parse(json)
      .map { |key, value| { Key: key, Value: value } }
      # => [{"Key":"key1","Value":"value1"},{"Key":"key2","Value":"value2"},{"Key":"key3","Value":"value3"},{"Key":"key4","Value":"value4"},{"Key":"key5","Value":"value5"}]
    
    {TagSet: tagset}.to_json
      # => '{"TagSet":[{"Key":"key1","Value":"value1"},{"Key":"key2","Value":"value2"},{"Key":"key3","Value":"value3"},{"Key":"key4","Value":"value4"},{"Key":"key5","Value":"value5"}]}'
    

    【讨论】:

    • 这很好用。我的要求略有变化,我不得不减少键的数量,但这仍然完美无缺!谢谢!
    猜你喜欢
    • 2020-10-28
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2021-10-16
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多