2

ハッシュの各キーに複数の値があります。ここでは、各キーの値を出力します

print "$var:",join ',',@{$hash{$var}},"\n";

上記の print ステートメントの出力は次のとおりです。

ABC:1,2,3,1,4,2,
DEF:9,3,4,5,3,5,

ここで、値の重複を削除したいと思います。望ましい出力は、

ABC:1,2,3,4
DEF:9,3,4,5

誰かがこれで私を助けることができますか?

ありがとう

4

4 に答える 4

3

個人的には、List::MoreUtilsの uniq がこれを処理する方法が気に入っています。サブルーチンは非常に単純で、そのままでも、モジュールを通してでも使用できます。

my %seen;
my @dedupe = grep { not $seen{$_}++ } @{$hash{$var}};

モジュールのサブルーチンは次のようになります。

sub uniq (@) {
    my %seen = ();
    grep { not $seen{$_}++ } @_;
}

このコードは、リストの最初の順序を保持します。

于 2012-10-16T19:12:26.197 に答える
3

使用List::MoreUtils::uniq:

@$_ = uniq @$_ foreach values %hash;
于 2012-10-16T18:38:20.250 に答える
2

配列から重複する値を削除しようとしている場合は、これを使用できます

#!/usr/bin/perl -w
use strict;
my @array = ('a','b','c','c','e');
my %hash = map { $_ => 1 } @array;
my @out = keys %hash;
printf("%s",join(',',@out));
于 2012-10-16T18:40:17.103 に答える
2

それがハッシュにあることは無関係です。やりたいことは、配列内の値を重複排除することです。

uniq()List::MoreUtils モジュールの関数を見てください http://search.cpan.org/dist/List-MoreUtils/

次のように自分で行うこともできます。

my %h = map {($_,1)} @array_with_dupes;
my @deduped_array = keys %h;

これはすべて、 "Data: Arrays" の下 の Perl FAQで広くカバーされています。

于 2012-10-16T18:35:09.523 に答える