很有趣的问题,试着写了一下,做法如下:
#!/usr/bin/perl
use strict;
use warnings;
my %rpt;
my $key_len_pre = 0;
my $key_len_cur = 0;
my $output;
/* 塞入资料进二维阵列 */
my $input = [
[ 'a', 'b', 'a' ],
[ 'a', 'b', 'b' ],
[ 'a', 'b', 'c' ],
[ 'a', 'b', 'd' ],
[ 'a', 'b', 'e' ],
[ 'a', 'b', 'e' ],
[ 'a', 'b', 'e' ],
[ 'a', 'b', 'f' ],
[ 'a', 'b', 'g' ],
[ 'a', 'b', 'g' ],
[ 'a', 'b', 'g' ],
[ qw (1 234 567) ],
[ qw (1 234 567) ],
[ qw (12 34 567) ],
];
foreach (@$input) {
/* 将每个2d阵列的字串转成scalar值, 经过简单的编码 */
my $encode;
$encode .= $_ . "^>^" for (@$_);
/* 使用 hash 来区分是否重复 */
$key_len_pre = $key_len_cur;
$rpt{$encode} += 1;
$key_len_cur = keys %rpt;
$output->[$key_len_pre] = $_ unless $key_len_pre eq $key_len_cur;
}
/* 输出所有阵列验证结果, output 即为未重复资料的阵列 */
foreach (@$output) {
print "final: @$_ \n";
}
输出:
final: a b a
final: a b b
final: a b c
final: a b d
final: a b e
final: a b f
final: a b g
final: 1 234 567
final: 12 34 567
※ 引述《firegsh (~\cite{yaranaiga})》之铭言:
: 就我所知一维阵列两种解法 一是uniq 二是用hash
: 但是现在我有一个二维阵列
: A[0]=('a','b','c')
: ...
: A[n]=('a','b','c')
: 那么我该怎么做才能把A[n]这的串行拿掉?谢谢!