Re: [問題] 去除二維陣列內重複串列

作者: clanguage (C語言)   2012-04-22 01:38:32
很有趣的問題,試著寫了一下,做法如下:
#!/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]這的串列拿掉?謝謝!
作者: firegsh (微風王子得第一)   2012-04-24 01:17:00
hmm,雖然自己解決了 還是感謝我的方法比較蠢,直接把資料弄成一個字串去uniq了

Links booklink

Contact Us: admin [ a t ] ucptt.com