删除Ruby中嵌套数组中的值

时间:2013-11-15 12:28:09

标签: ruby arrays multidimensional-array

我有以下数组结构:

[   ["one_id",[["1a", 10], ["1b", 54], ["1c", 43]]], 
    ["two_id",[["2a", 32], ["2b", 76], ["2c", 34]]], 
    ["thr_id",[["3a", 85], ["3b", 13], ["3c", 42]]], 
    ["fou_id",[["4a", 15], ["4b", 21], ["4c", 65]]], 
]

我想删除嵌套数组的“值”以获得如下输出:

[   ["one_id",  ["1a","1b","1c"]], 
    ["two_id",  ["2a","2b","2c"]], 
    ["thr_id",  ["3a","3b","3c"]], 
    ["fou_id",  ["4a","4b","4c"]], 
]

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

有代码

arr = [   ["one_id",[["1a", 10], ["1b", 54], ["1c", 43]]], 
    ["two_id",[["2a", 32], ["2b", 76], ["2c", 34]]], 
    ["thr_id",[["3a", 85], ["3b", 13], ["3c", 42]]], 
    ["fou_id",[["4a", 15], ["4b", 21], ["4c", 65]]], 
]

arr2 = arr.map do |element|
    r = [element[0]]
    r << element[1].map(&:first)
    r
end

答案 1 :(得分:2)

这是一种非破坏性的:

array.map{|k, v| [k, v.map(&:first)]}
#=> [
  ["one_id", ["1a", "1b", "1c"]],
  ["two_id", ["2a", "2b", "2c"]],
  ["thr_id", ["3a", "3b", "3c"]],
  ["fou_id", ["4a", "4b", "4c"]]
]

答案 2 :(得分:1)

如果通过“删除'值'”,则意味着“将最内层数组替换为第一个元素:

警告:此代码包含幻数,甚至不是一般的。

require "pp"

a = [   ["one_id",[["1a", 10], ["1b", 54], ["1c", 43]]],
        ["two_id",[["2a", 32], ["2b", 76], ["2c", 34]]],
        ["thr_id",[["3a", 85], ["3b", 13], ["3c", 42]]],
        ["fou_id",[["4a", 15], ["4b", 21], ["4c", 65]]],
]

a.each do |lv1|
  lv1[1].map! &:first
end

pp a

# => 
# [["one_id", ["1a", "1b", "1c"]],
# ["two_id", ["2a", "2b", "2c"]],
# ["thr_id", ["3a", "3b", "3c"]],
# ["fou_id", ["4a", "4b", "4c"]]]

答案 3 :(得分:0)

    require "pp"

    array = [   ["one_id",[["1a", 10], ["1b", 54], ["1c", 43]]],
            ["two_id",[["2a", 32], ["2b", 76], ["2c", 34]]],
            ["thr_id",[["3a", 85], ["3b", 13], ["3c", 42]]],
            ["fou_id",[["4a", 15], ["4b", 21], ["4c", 65]]],
    ]

    array.collect{|k, v| [k, v.collect(&:first)]}

# [["one_id", ["1a", "1b", "1c"]], 
#  ["two_id", ["2a", "2b", "2c"]], 
#  ["thr_id", ["3a", "3b", "3c"]], 
#  ["fou_id", ["4a", "4b", "4c"]]]