Tôi cần phải thêm các phần tử duy nhất vào một mảng từ các đầu vào chứa một số giá trị trùng lặp.Làm thế nào để tránh đẩy các giá trị trùng lặp vào một mảng Perl
Làm cách nào để tránh đẩy các giá trị trùng lặp vào một mảng Perl?
Tôi cần phải thêm các phần tử duy nhất vào một mảng từ các đầu vào chứa một số giá trị trùng lặp.Làm thế nào để tránh đẩy các giá trị trùng lặp vào một mảng Perl
Làm cách nào để tránh đẩy các giá trị trùng lặp vào một mảng Perl?
Bạn chỉ cần sử dụng băm như thế này:
my %hash;
$hash{$key} = $value; # you can use 1 as $value
...
này sẽ tự động ghi đè lên các phím trùng lặp.
Khi bạn cần in nó, chỉ cần sử dụng:
foreach my $key (keys %hash) {
# do something with $key
}
Nếu bạn cần phải sắp xếp các phím, sử dụng
foreach my $key (sort keys %hash) ...
Ồ, đây phải là bản ghi mới: câu trả lời được chấp nhận 4 năm sau :) – mvp
Anh ấy phải chắc chắn điều này đã hiệu quả. P –
push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray;
kiểm tra này nếu giá trị là hiện diện trong mảng trước đẩy. Nếu giá trị không có, nó sẽ được đẩy.
Nếu giá trị không phải là số, bạn nên sử dụng eq
thay vì ==
.
Giải pháp này trở nên rất kém hiệu quả khi mảng phát triển lớn - phương pháp băm được ưu tiên. –
bằng cách sử dụng ~~ chúng ta có thể phiên bản perl tối thiểu là 5.10.1
use v5.10.1;
use strict;
use warnings;
my @ARRAY1 = qw/This is array of backup /;
my @ARRAY2;
my $value = "version.xml" ;
sub CheckPush($$)
{
my $val = shift (@_);
my $array_ref= shift (@_);
unless ($val ~~ @$array_ref)
{
print "$val is going to push to array \n";
push(@$array_ref,$val);
}
return (@$array_ref);
}
@ARRAY1 = CheckPush($value,\@ARRAY1);
print "out \n";
foreach $_ (@ARRAY1) {
print "$_ \n";
}
@ARRAY2 = CheckPush ($value,\@ARRAY2);
print "out2 \n";
foreach $_ (@ARRAY2) {
print "$_ \n";
}
Tóm lại: 'push (@yourarray, $ yourvalue) trừ khi $ yourvalue ~~ @yourarray;' – Codr
bạn có thể sử dụng các khái niệm của một tập: http://stackoverflow.com/questions/3700037/how-can-i- represent-sets-in-perl – akonsu
Luôn có 'List :: MoreUtils' uniq function nếu bạn không phản đối CPAN. – squiguy