加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在不在Perl中嵌套foreach语句的情况下处理嵌套循环?

发布时间:2020-12-16 06:27:00 所属栏目:大数据 来源:网络整理
导读:我有一个Perl脚本,它嵌套foreach循环,如下所示.这需要很长时间: #! /usr/bin/perluse strict;use warnings;my @sites = ('a','b','c');my @servers = ('A','B');my @data_type = ("X","Y","Z");foreach my $site (@sites) { foreach my $server_type (@serv
我有一个Perl脚本,它嵌套foreach循环,如下所示.这需要很长时间:

#! /usr/bin/perl

use strict;
use warnings;

my @sites = ('a','b','c');
my @servers = ('A','B');
my @data_type = ("X","Y","Z");

foreach my $site (@sites) {
    foreach my $server_type (@servers) {
        foreach my $data (@data_type) {
            #statements
        }
    }
}

像这样嵌套foreach语句需要很长时间,而且很难阅读而且不是很漂亮.谁能建议一个更好的方法来使用哈希或其他一些聪明的结构来编码这个结构?

解决方法

我不明白你的问题是什么,但如果你习惯使用SQL或其他东西,你可以使用通用的笛卡尔积:

sub cartesian {
    my @C = map { [ $_ ] } @{ shift @_ };
    foreach (@_) {
        my @A = @$_;
        @C = map { my $n = $_; map { [ $n,@$_ ] } @C } @A;
    }
    return @C;
}

my @sites = ('a',"Z");

foreach (cartesian(@sites,@servers,@data_type)) {
    ($data,$server_type,$site) = @$_;
    print "$site $server_type $datan";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读