arrays - Perl:计算复杂数据结构中的元素

标签 arrays perl hash perl-data-structures

我对复杂数据结构不熟悉。我有点理解他们背后的想法,但在获取数据时遇到一些困难。我通过使用 Data::Dumper 找出了当前问题 child 的结构....

$VAR1 = {
      '4' => {
               'engine_coded' => 0,
               'name' => 'FILTER_1',
               'filter_actions' => {
                                     'X_Override_Queue_Level' => 'Value'
                                   },
               'filter_criteria' => [
                                      [
                                        'X_Charge',
                                        '=',
                                        'X_CHARGE_1'
                                      ]
                                    ]
             }
    };

我需要做的是确保给定一个过滤器名称(在本例中为“4””),“name”以及“filter_actions”和“filter_criteria”都有一个值。

有人知道如何最好地实现这一目标吗?非常感谢! 珍妮

最佳答案

让我们把它分解成几个部分......

首先,创建一个验证结构的函数:

sub validate
{
    my ($data) = @_;

    # always return true for now
    return 1;
}

现在让我们开始填写这些位...您想使用过滤器名称作为验证检查的一部分,所以让我们将其添加为参数:

sub validate
{
    my ($data, $filter_name) = @_;

    # always return true for now
    return 1;
}

在执行其他操作之前,检查该过滤器名称是否作为键存在是有意义的;如果没有,则验证失败:

sub validate
{
    my ($data, $filter_name) = @_;

    return if not exists $data->{$filter_name};

    # otherwise, return true
    return 1;
}

现在还要检查是否有一个值。由于哈希键中的定义性是“exists”的超集(定义的任何值也必须存在,但并非每个存在的值都需要定义 - 因为 undef 可能是该值),因此可以省略第一个检查:

sub validate
{
    my ($data, $filter_name) = @_;

    return if not defined $data->{$filter_name};

    # otherwise, return true
    return 1;
}

我们已经检查了 filter_name 键是否存在于数据中并且已定义,但在更深入地查看之前,我们需要确认它确实是一个 hashref:

sub validate
{
    my ($data, $filter_name) = @_;

    return if not defined $data->{$filter_name};

    return if ref $data->{$filter_name} ne 'HASH';

    # otherwise, return true
    return 1;
}

现在在过滤器名称下查找“filter_actions”和“filter_criteria”键:

sub validate
{
    my ($data, $filter_name) = @_;

    return if not defined $data->{$filter_name};

    return if ref $data->{$filter_name} ne 'HASH';

    return if not defined $data->{$filter_name}{filter_actions};
    return if not defined $data->{$filter_name}{filter_actions};

    # otherwise, return true
    return 1;
}

就是这样!请务必阅读 perldoc perlreftoot 中有关使用 perl 数据结构的内容。 , perldoc perlref ,和 perldoc perldsc .

关于arrays - Perl:计算复杂数据结构中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901308/

相关文章:

arrays - Perl:查找哈希的最大值并计算平均值

perl - 在 GeoServer 上使用 WWW::Mechanize 时 session 过期

perl - Perl 中的 "||"和 "or"有什么区别?

python - Python 内部 hash() 函数的复杂性

php - 在没有顺序或键匹配的情况下比较多维数组

c - 通过引用传递数组的两种不同方式。哪一个更正确?

ios - 将 key 与 iOS swift 4 中的字典数组进行比较

javascript - 将 JSON 信息显示到下拉列表中。Angularjs

java - 将字符串转换为 Sha-256 哈希值

swift - 有没有办法知道 Swift 是如何计算 hashValue 的?