arrays - Perl 数组 : Pattern matches then move to the another array

标签 arrays regex perl hash

Perl:我想移动数组中与模式匹配的每个元素。

例如,我有下面的数组 @array1 = {cat 2, dog 3#move, tiger 4#move, lion 10}

现在我想将狗 3、老虎 4(作为模式 #move 匹配)移动到另一个数组让我们说 @array2

foreach $array (@array1) {
    if ($array =~ m/(./w*) (./d*)#move/) {
          push @array2, $1.$2;
    }

但我想从 array1 中删除那些元素。提前致谢

最佳答案

有不止一种方法可以做到这一点,所以这是另一种方法,灵感来自 this answer : 使用 grep 来保留你想要的元素。由于 Perl 仅支持在某些情况下从您正在迭代的数组中删除元素,因此这不需要您知道这些是哪些情况:)。

use strict; use warnings;
my @array1 = ("cat 2", "dog 3#move", "tiger 4#move", "lion 10");
my @array2;

@array1 = grep {    # We are going to search over @array1 and only keep some elements.
    if (/(.*)#move/) {  # If this is one we want to move...
        push @array2, $1;   # ... save it in array2...
        0;      # ... and do not keep it in array1.
    } else {
        1;      # Otherwise, do keep it in array1.
    }
} @array1;

# Debug output - not required
print "Array 1\n";
print join "\n", @array1;
print "\nArray 2\n";
print join "\n", @array2;
print "\n";

输出:

Array 1
cat 2
lion 10
Array 2
dog 3
tiger 4

关于arrays - Perl 数组 : Pattern matches then move to the another array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56007213/

相关文章:

java - 实例变量在每个对象初始化中都是一样的

regex - Flutter 检测 UTF8 主题标签

java - 这个正则表达式是如何工作的?

regex - 仅当不在带引号的字段中或在 2 个引号之间时才匹配字符

xml - 用 perl 处理一个大的 xml 文件

javascript - 在 JSX 中使用不同的 View 渲染数组

java - 如何在java中的方法内部使用类中的变量

ruby - 确定一个数组是否包含另一个数组的所有元素

perl - 如何用 perl 打开多个事件终端

c++ - 是否有用于 C 和/或 C++ 的数据库访问库,其接口(interface)与 Perl 的 DBI 类似?