【问题标题】:Perl: Removal element from an multiple arrayPerl:从多个数组中删除元素
【发布时间】:2014-07-21 12:23:53
【问题描述】:

我正在尝试从数组中删除值我已经尝试了以下所有 3 种方法,但之前和之后的转储器输出保持不变。

@数组:

$VAR1 = [
          [
            'LINK-IF-A/1/1/1<->IF-B/1/1/1',
            'LINK-IF-C/1/1/1<->IF-D/1/1/1',
            'LINK-IF-E/1<->IF-F/2'
          ]
        ];

$value = LINK-IF-C/1/1/1IF-D/1/1/1

Method1 :

my @remove = grep { $_ != "$value" } @array;

Method2 :

my @remove = grep { grep {!/$value/ } @$_ } @array;

Method3 :

my @remove = grep(!/"$value"/, @array);

DEBUG(Dumper\@remove)); --> 与输入相同的输出...不删除

谢谢,

【问题讨论】:

  • @remove 应该由什么组成?

标签: perl


【解决方案1】:
for my $inner (@array) {
   @$inner = grep { $_ eq $value } @$inner;
}

抱歉,没时间解释。

【讨论】:

    【解决方案2】:

    Codepad

    一种方法是遍历数组并 grep 每个内部数组:

    my @remove = map { [ grep { !/$value/ } @$_ ] } @array;
    

    如果你的外层数组真的只有一个元素的数组,你可以避免使用map并将数组从堆栈中弹出:

    my @remove =  [ grep { !/$value/ } @{$array[0]} ];
    

    【讨论】:

    • @array 是一个 AoA,但 @remove 不是。这不可能。
    • @ikegami:你是对的。他还应该包括@remove 应该是什么样子,但我想它应该像你建议的那样模仿@array。我可能会删除这个答案,因为我现在已经筋疲力尽了。或懒人方法:重新包装数组 ref :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2022-03-19
    • 1970-01-01
    • 2012-04-27
    相关资源
    最近更新 更多