从数组中的散列内的数组中删除数据 - Ruby

时间:2015-03-05 01:20:24

标签: ruby-on-rails ruby arrays

我有一个数组说my_array,其数据如下:

[
    {
        : name=>"Orange",
        : data=>[
            [
                1421215199000,
                0
            ],
            [
                1421215199000,
                2.2566121687633
            ],
            [
                1421819999000,
                0
            ],
            [
                1421819999000,
                2.43260664893362
            ],
            [
                1422424799000,
                0
            ],
            [
                1422424799000,
                0
            ]
        ]
    },
    {
        : name=>"Apple",
        : data=>[

        ]
    },
    {
        : name=>"Mango",
        : data=>[

        ]
    }
]

从“:data”的values / array中,我希望删除值为“0”的数组对象。如本例所示,我希望删除以下项目:

[
    1421215199000,
    0
],

[
    1421819999000,
    0
],
[
    1422424799000,
    0
],
[
    1422424799000,
    0
]

因此,删除上述项目后的最终my_array应如下所示:

[
    {
        : name=>"Orange",
        : data=>[
            [
                1421215199000,
                2.2566121687633
            ],
            [
                1421819999000,
                2.43260664893362
            ]
        ]
    },
    {
        : name=>"Apple",
        : data=>[

        ]
    },
    {
        : name=>"Mango",
        : data=>[

        ]
    }
]

有没有一种简单的方法可以在红宝石中实现这一目标?

1 个答案:

答案 0 :(得分:0)

#!/usr/bin/env ruby
require 'pp'

f = [
    {
        :name=>"Orange",
        :data=>[
            [
                1421215199000,
                0
            ],
            [
                1421215199000,
                2.2566121687633
            ],
            [
                1421819999000,
                0
            ],
            [
                1421819999000,
                2.43260664893362
            ],
            [
                1422424799000,
                0
            ],
            [
                1422424799000,
                0
            ]
        ]
    }]

tp = f.collect{|x| x.merge(:data => x[:data].reject{|p| p[1]==0}) }
pp tp

收集所有的魔力。

阅读方式是: 对于数组的每个元素,哈希,将数据键关联的值替换为通过遍历数据键生成的值,并拒绝数组中第二项等于0的所有元素。