当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl中找到两个数组的不区分大小写的唯一元素?

如何解决《如何在Perl中找到两个数组的不区分大小写的唯一元素?》经验,为你挑选了2个好方法。

我有三个阵列.

@ 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,因为第一个轨道,b-corrupt,已经在旧轨道阵列中,只是情况不同.

在此先感谢您的帮助


#!/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";
}

j_random_hac.. 8

@test{ map { lc } @array1 } = ();
@new_ones = grep { !exists $test{lc $_} } @array2;

如果要将列表添加@new_ones到已有的列表中@array1,从而生成到目前为止看到的所有唯一项的列表:

push @array1, @new_ones;


brian d foy.. 6

你只想要独特的元素@array2吗?如果你想要两个数组中的所有独特元素,你只需要浏览所有元素并记住你之前看过的元素:

my %Seen = ();
my @unique = grep { ! $Seen{ lc $_ }++ } @array1, @array2;

您发布了一个更新,您说您要选择尚未处理的元素.而不是两个数组,考虑一个哈希将所有数据保存在一个地方.首先使用值0初始化所有内容:

my %Tracks = map { $_, 0 } @all_tracks;

处理(或播放)其中一个元素时,将其哈希值设置为true值:

$Tracks{ $playing } = 1;

如果需要未处理的曲目,请选择值不为真的键:

@not_processed = grep { ! $Tracks{$_} } keys %Tracks;

如果您对自己的商品有疑问,只需提出%Tracks正确的问题即可.



1> j_random_hac..:
@test{ map { lc } @array1 } = ();
@new_ones = grep { !exists $test{lc $_} } @array2;

如果要将列表添加@new_ones到已有的列表中@array1,从而生成到目前为止看到的所有唯一项的列表:

push @array1, @new_ones;



2> brian d foy..:

你只想要独特的元素@array2吗?如果你想要两个数组中的所有独特元素,你只需要浏览所有元素并记住你之前看过的元素:

my %Seen = ();
my @unique = grep { ! $Seen{ lc $_ }++ } @array1, @array2;

您发布了一个更新,您说您要选择尚未处理的元素.而不是两个数组,考虑一个哈希将所有数据保存在一个地方.首先使用值0初始化所有内容:

my %Tracks = map { $_, 0 } @all_tracks;

处理(或播放)其中一个元素时,将其哈希值设置为true值:

$Tracks{ $playing } = 1;

如果需要未处理的曲目,请选择值不为真的键:

@not_processed = grep { ! $Tracks{$_} } keys %Tracks;

如果您对自己的商品有疑问,只需提出%Tracks正确的问题即可.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有