gpt4 book ai didi

arrays - 查找与第二个数组的元素匹配的数组元素

转载 作者:行者123 更新时间:2023-12-01 10:42:24 25 4
gpt4 key购买 nike

我有两个数组 @uarts@txd 看起来像这样

@uarts = qw(uart_1 uart_10 uart_3 uart_9 ); 
@txd = qw(PIO_uart_1 PIO_2_uart_1 PIO_uart_3 PIO_uart_10 PIO_uart_5 PIO_uart_9 PIO_uart_7);

我只想从 @txd 中提取那些包含 @uarts 元素的元素。我为其编写的代码如下,但无法正常工作。

my @array;
for (my $i = 0 ; $i <= $#uarts ; $i++) {
@array = grep { $_ =~ /$uarts[$i]/ } (@txd);
print "@array\n";
}

最佳答案

我必须说实话。我认为 mapgrep 都很烦人,如果您不熟悉 perl,请绕道而行。它们并没有给您带来太多好处 - 它们看起来像是在降低代码的复杂性,但那是因为 grep 的循环是隐式的。所以你所做的只是让你的代码更难理解。

此外 - 我真的不喜欢 for 循环的那种风格 - 它几乎在 perl 中总是多余的 - 在上面的例子中,你引用的唯一元素是当前一个(如果您要访问“下一个”或“上一个”元素,则另当别论)。

所以展开它:

foreach my $uart ( @uarts ) {
foreach my $PIO ( @txd ) {
if ( $PIO =~ m/$uart/ ) {
print "$PIO matches $uart\n";
}
}
}

注意:这不会进行任何类型的唯一性测试,因此如果出现多个匹配项,您就会被骗。

哦,打开 use strict;use warnings;。您的数组声明是错误的。

my @uarts = qw ( uart_1 uart_10 uart_3 uart_9 );
my @txd = qw ( PIO_uart_1 PIO_2_uart_1 PIO_uart_3 PIO_uart_10
PIO_uart_5 PIO_uart_9PIO_uart_7
);

我还要指出 - 您已经将 @array 限定在循环之外,这大概意味着想要保留它。但是随后您通过分配 grep 的输出来破坏它的每次迭代。

我建议您在循环内作用域 @array,或者查看 push/popshift/unshift 作为在现有数组中添加和删除元素的方法。

关于arrays - 查找与第二个数组的元素匹配的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29163614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com