У меня есть три массива.Как найти непоследовательные уникальные элементы двух массивов в Perl?
- @ Array1, содержащие имена файлов
- @ array2, содержащих имена файлов
- @unique, который я хочу, чтобы содержать уникальные предметы
Я использую следующий код, чтобы сравнить два массива и вывод на трети массив, содержащий уникальные имена файлов.
@test{@array1} =();
@unqiue = grep {!exists $test{$_}} @array2;
Однако выход чувствителен к регистру, как его изменить, чтобы он не чувствителен к регистру?
Благодаря
Привет, К сожалению, я думаю, я не задать свой вопрос очень хорошо!
Я сохраняю старый массив треков, содержащий треки, которые я уже играл, и затем у меня есть новый массив треков, который я хочу выбрать. Я хочу сравнить новые треки со старым массивом треков, чтобы гарантировать, что я получаю только треки, которые уникальны для выбора.
Так что в настоящее время выход;
Unique Tracks: \my Music\Corrupt Souls\b-corrupt.mp3 \My Music\gta4\10 - Vagabond.mp3 \My Music\gta4\14 - War Is Necessary.mp3 \My Music\Back To Black\05 Back to Black.mp3
Что мне нужно для результата просто вернуть дорожки 10, 14 и 05 в качестве первой дорожки, б-коррумпированной, уже в старом массиве дорожки только дело обстоит иначе.
Заранее спасибо за помощь
#!/usr/bin/perl $element = '\\My Music\\Corrupt Souls\\b-corrupt.mp3'; push (@oldtrackarray, $element); $element = '\\My Music\\Back To Black\\03 Me and Mr Jones.mp3'; push (@oldtrackarray, $element); $element = '\\My Music\\Jazz\\Classic Jazz-Funk Vol1\\11 - Till You Take My Love [Original 12 Mix].mp3'; push (@oldtrackarray, $element); $element = '\\My Music\\gta4\\01 - Soviet Connection (The Theme From Grand Theft Auto IV).mp3'; push (@oldtrackarray, $element); $element = '\\My Music\\gta4\\07 - Rocky Mountain Way.mp3'; push (@oldtrackarray, $element); $element = '\\My Music\\gta4\\02 - Dirty New Yorker.mp3'; push (@oldtrackarray, $element); print "Old Track Array\n"; for($index=0; $index<@oldtrackarray+1; $index++) { print "$oldtrackarray[$index]\n";} $element = '\\my Music\\Corrupt Souls\\b-corrupt.mp3'; push (@newtrackarray, $element); $element = '\\My Music\\gta4\\10 - Vagabond.mp3'; push (@newtrackarray, $element); $element = '\\My Music\\gta4\\14 - War Is Necessary.mp3'; push (@newtrackarray, $element); $element = '\\My Music\\Back To Black\\05 Back to Black.mp3'; push (@newtrackarray, $element); print "New Tracks\n"; for($index=0; $index<@newtrackarray+1; $index++) { print "$newtrackarray[$index]\n"; } @test{@oldtrackarray} =(); @uninvited = grep {!exists $test{$_}} @newtrackarray; print "Unique Tracks:\n"; for($index=0; $index<$#uninvited+1; $index++) { print "$uninvited[$index]\n"; }
Все решения по-прежнему применяются, насколько я могу судить. Есть ли что-то, о чем мы не обращаемся? –
Когда я пытаюсь решить проблемы, я не получаю никаких треков вообще, что немного запутывает. Новые треки произошли из «черного ящика», в котором звучат дорожки, поэтому, к сожалению, я не могу вставить все в один массив. Cheers –
А ... Я думаю, что неправильно понял. Лучший способ сделать это - просто использовать @ array1 и @ array2 - забудьте @unique. Убедитесь, что @ array1 запущен пустым; с этого момента мы будем накапливать в него уникальные результаты, нажимая на него «новые» записи - см. мое отредактированное решение. –