+ -
当前位置:首页 → 问答吧 → 请问在文本输出时如何保证重复的行不输出

请问在文本输出时如何保证重复的行不输出

时间:2011-06-17

来源:互联网

我的文本内容如下所示:
张三
李四
王玉
张三
李四

我想输出的结果如下:
王玉
因为张三,李四在文本中都有重复出现,而且不管这种重复是否是连续的行,只要出现了就将该行删除。
还有一个要求就是行的顺序最好不要调,像sort打乱行序的不是很好。
请问高手,如何实现?万分感谢!

作者: chenjiali1   发布时间: 2011-06-17

先把所有内容都读进个 hash 注意保存顺序信息同时处理重复情况,然后再按保存的顺序信息输出

my %hash;
while (<>) {
    chomp;
    if (defined $hash{$_}) {
        $hash{$_} = undef;    #重复的标为 undef
        next;
    }
    $hash{$_} = [$_, $.];  # 行号即为顺序
}

my @uniq = grep defined, values %hash;         #过滤到重复的
@uniq = sort {$a->[1] <=> $b->[1]} @uniq;    #按保存的顺序排序
say $_->[0] for @uniq

作者: zhlong8   发布时间: 2011-06-17