Я не могу удалить дубликаты из моего массива, просто получая последний элемент массива - PullRequest
2 голосов
/ 18 июля 2011

Я знаю, что есть похожий вопрос, но я взял оттуда подсказки и применил свой код для удаления дубликатов. Все, что я получаю, это только последний элемент массива. Я не могу видеть, где я иду не так. пожалуйста, помогите мне узнать, где я иду не так.

use strict;
use warnings;
use File::Find;
use Data::Dumper;
use List::MoreUtils qw/ uniq /;

my $localdir = 'images/p/';
my @filefound;
my @split1;
my $before;

find(sub {push @filefound, $File::Find::name if /.jpg$/ },$localdir);

for(@filefound) { print "$_ \n";}

foreach (@filefound){
my @result = split('_',$_);
@split1 = $result[0];
}

my %unique = ();
foreach my $item (@split1)
{ 
    $unique{$item} ++;
}

my @myuniquearray = keys %unique;
foreach (@myuniquearray){ print "$_  \n";}

Ответы [ 3 ]

3 голосов
/ 18 июля 2011

Проблема здесь заключается в следующем:

foreach (@filefound){
    my @result = split('_',$_);
    @split1 = $result[0];
}

Вы переназначаете @split1 каждый раз через цикл.Попробуйте вместо этого push @split1, $result[0]; вставить новый элемент в существующий список.

1 голос
/ 18 июля 2011

@ split1 = $ result [0]; Вы получаете только один элемент в вашем массиве.

1 голос
/ 18 июля 2011

В первом цикле вы перезаписываете @split1 на каждой итерации вместо добавления результата в список.

...