Как избежать нажатия повторяющихся значений в массив Perl Мне нужно добавить уникальные элементы в массив из входов, содержащих несколько повторяющихся значений. Как избежать дублирования значений в массиве Perl? Ответ 1 Вам просто нужно использовать хеш следующим образом: my %hash; $hash{$key} = $value; # you can use 1 as $value ... Это автоматически перезапишет дублирующиеся ключи. Когда вам нужно распечатать его, просто используйте: foreach my $key (keys %hash) { # do something with $key } Если вам нужно сортировать ключи, используйте foreach my $key (sort keys %hash) ... Ответ 2 push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray; Это проверяет, присутствует ли значение в массиве перед нажатием. Если значение отсутствует, оно будет нажато. Если значение не является числовым, вы должны использовать eq вместо ==. Ответ 3 используя ~~, мы можем использовать минимальный Perl-версию 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"; }
Ответ 1 Вам просто нужно использовать хеш следующим образом: my %hash; $hash{$key} = $value; # you can use 1 as $value ... Это автоматически перезапишет дублирующиеся ключи. Когда вам нужно распечатать его, просто используйте: foreach my $key (keys %hash) { # do something with $key } Если вам нужно сортировать ключи, используйте foreach my $key (sort keys %hash) ...
Ответ 2 push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray; Это проверяет, присутствует ли значение в массиве перед нажатием. Если значение отсутствует, оно будет нажато. Если значение не является числовым, вы должны использовать eq вместо ==.
Ответ 3 используя ~~, мы можем использовать минимальный Perl-версию 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"; }