【问题标题】:How to read and print the common elements of multiple array in perl?如何在perl中读取和打印多个数组的公共元素?
【发布时间】:2012-07-26 20:23:29
【问题描述】:

我已将值存储在 5 个文本文件中。每个文本文件中的值应被视为一个数组。我正在尝试编写一个 perl 程序,读取和打印这 5 个数组中的公共元素。

举例

@a1=(1,7,4,5); 

@a2=(1,9,4,5); 

@a3=qw(1,6,4,5 ); 

@a4=qw(1 2 4 5 ); 

@a5=qw(1 2 4 5 ); 

我希望打印

1 4 5 

【问题讨论】:

  • 只需从 cpan 下载此模块并阅读文档。
  • 本帖没有任何问题,希望您在此处寻求帮助之前已经尽力并达到了障碍。 StackOverflow 不是免费软件代理。如果您想获得有关如何阅读文件的建议,您必须说明它们的格式。
  • 我是一名生物系的学生,我从来没有编程过,我正在学习 perl。
  • 阅读关于print函数、关于open函数和<>操作符的文档(在IO-handling章节)

标签: perl


【解决方案1】:

perlfaq 有很多常见问题的答案。当然,如果在再次提问之前没有人费心检查那里,那就有点浪费时间和精力了:-)

How do I compute the difference of two arrays? How do I compute the intersection of two arrays?

使用哈希。这是可以同时执行更多操作的代码。它假设每个 元素在给定数组中是唯一的:

my (@union, @intersection, @difference);
my %count = ();
foreach my $element (@array1, @array2) { $count{$element}++ }
foreach my $element (keys %count) {
    push @union, $element;
    push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
}

你需要两个数组的交集。然后再做三遍。

【讨论】:

    【解决方案2】:

    你没有说你的输入文件有什么格式,但是这个程序会找到每个文件中的所有数字字符串,并列出所有这些数字的共同值。

    输入文件列表应为命令行参数。

    use strict;
    use warnings;
    
    use File::Slurp 'read_file';
    
    my %counts;
    
    for (@ARGV) {
      $counts{$_}++ for map /\d+/g, read_file $_;
    }
    
    my @common = grep $counts{$_} == @ARGV, keys %counts;
    
    printf "(%s)\n", join ', ', @common;
    

    输出

    (4, 1, 5)
    

    【讨论】:

    • @loldop:因为我不同意你的观点,也不按你说的去做
    • 您对他的问题的评论(3 票赞成)与您的回答不相关。
    • 你回答他,仅此而已。如我所见,没有有关格式的信息。你这么说并做出通用解决方案的答案。
    • @loldop:因为有一个可能有效的通用解决方案,所以我给了它。我说他不应该问这样的问题,并不是说我不应该回答。这对你有什么问题?
    • 正如他所说:生物学家和自学perl我认为,这不是他想要的。在这种情况下,最好解释一下 IO 处理。
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多