当前位置: 首页 > 知识库问答 >
问题:

Ruby以特定顺序合并两个数组

茅慈
2023-03-14

我正在尝试使用 json 对象的 s3api cli 为 aws 放置对象标记创建“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

任何关于如何创建此标记集的建议都将不胜感激!

共有1个答案

钦海荣
2023-03-14
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"}]}'
 类似资料:
  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I

  • 问题内容: 我有两个像这样的数组: 我想结合这两个数组,使其不包含重复项,并保留其原始键。例如,输出应为: 我已经尝试过了,但是它正在更改其原始键: 有什么办法吗? 问题答案: 只需使用: 那应该解决。因为如果一个键出现多次(例如在您的示例中),则使用字符串键,因此一个键将覆盖具有相同名称的处理键。因为在您的情况下,它们两者都具有相同的值,但这无关紧要,并且还会删除重复项。 更新:我刚刚意识到,P

  • 问题是== 将nums1和nums2合并到一个按非递减顺序排序的数组中。 最终排序的数组不应由函数返回,而应存储在数组 nums1 中。为了适应这种情况,nums1 的长度为 m n,其中前 m 个元素表示应合并的元素,最后 n 个元素设置为 0 并应忽略。nums2 的长度为 n。 我的代码中有什么错误??? 您的意见 我的产出 预期产出

  • 问题内容: 我正在寻找一个jQuery方法来合并两个数组,以便它们的值交替出现: 我想要的结果是: 请注意,我知道在JS中做到这一点并不重要,但是我追求的是jQuery方法。 问题答案: 您可以使用以下方法:

  • 问题内容: 我有两个数组,我想将这两个数组合并为一个数组。请查看以下详细信息: 第一个数组: 第二个数组: 我想要这个结果。有人知道该怎么做吗? 希望你理解这个问题。先感谢您。 问题答案: 已修正 (再次) 接受无限数量的输入数组,将所有子数组作为索引数组合并到一个容器中,然后返回结果。 编辑03/2014: 提高可读性和效率

  • 我想在桌面上切换我的网格的第3色和第4色。我知道我可以为每个项目分配网格顺序,或者为两个div使用自己的行,然后设置顺序,但我希望避免这两个,以减少代码。 有没有办法用CSS-Grid来实现这一点?我对通过css-flex的解决方案持开放态度,如果这会更容易的话。 我当前的代码如下所示: null null