我有两个数组.我需要检查并查看其中一个元素是否出现在另一个元素中.
有没有比嵌套循环更有效的方法呢?我每个都有几千个元素,需要经常运行程序.
我有两个数组,@a和@b.我想在两个数组的元素之间进行比较.
my @a = qw"abc def efg ghy klm ghn";
my @b = qw"def ghy jgk lom com klm";
Run Code Online (Sandbox Code Playgroud)
如果任何元素匹配,则设置一个标志.有没有简单的方法来做到这一点?
我有两个数组,我想找到一个数组但不是另一个数组的元素:
例如:
@array1 = ("abc", "cde", "fgh", "ijk", "lmn")
@array2 = ("abc", "fgh", "lmn")
Run Code Online (Sandbox Code Playgroud)
我需要最终得到:
@array3 = ("cde", "ijk")
Run Code Online (Sandbox Code Playgroud) 我有两组范围,由[start,stop]值表示.一些范围重叠,这意味着一个范围的开始位于另一个范围的[开始,停止]之间.我想制作一组没有这种重叠的新范围,并且不包括范围内的任何新值.
范围看起来像这样:
@starts @ends
5 108
5 187
44 187
44 229
44 236
64 236
104 236
580 644
632 770
Run Code Online (Sandbox Code Playgroud)
我期望的输出是这样的:
@starts @ends
5 236
580 770
Run Code Online (Sandbox Code Playgroud)
这是因为前七个范围与5 => 236的间隔重叠,后两个与632 => 770的间隔重叠.
这是我试过的代码:
$fix = 0;
foreach (@ends) {
if ($starts[$fix + 1] < $ends[$fix]) {
splice(@ends, $fix, $fix);
splice(@starts, $fix + 1, $fix + 1);
} else {
$fix += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以自己打印出这些值,我只需要帮助合并算法.
我有三个阵列.
我使用以下代码比较两个数组并输出包含唯一文件名的第三个数组.
@test{@array1} = ();
@unqiue = grep {!exists $test{$_}} @array2;
Run Code Online (Sandbox Code Playgroud)
但是输出区分大小写,如何将其更改为不区分大小写?
谢谢
嗨,对不起,我想我没有问过我的问题!
我保留了一个包含我已经播放过的曲目的旧轨道数组,然后我想要一个新的轨道数组.我想将新曲目与旧曲目阵列进行比较,以确保我只获得唯一可供选择的曲目.
所以目前的输出是;
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 …