arrays - 比较两个二维数组以匹配字符串
问题描述
我想比较两个二维数组中的字符串,但大小不一样。所以,我想移动一个数组中的元素以匹配另一个数组中的所有元素,但我不知道应该如何循环。
这是我第一次使用 perl 语言。我以前学过c语言。
#!/usr/intel/pkgs/perl/5.14.1/bin/perl
use Data::Dumper qw(Dumper);
@clk = (
'prescc_ux_aux_clk',
'prescc_ux_prim_clk',
'usb2_phy_side_clk',
'usb3_phy_side_clk',
'ux_prim_clk',
'ux_side_clk',
'ux_xtal_frm_refclk',
'uxd_aux_clk',
'uxd_pgcb_clk',
'uxd_prescc_aux_clk',
'uxd_prim_clk',
'uxd_side_clk',
'uxd_suspend_clk');
@clkack = (
'ccu_ux_xtal_frm_refclk_ack',
'ibbs_ux_prim_clkack',
'sbr_ux_side_clkack',
'uxd_aux_clkack',
'uxd_pgcb_clkack',
'uxd_prim_clkack',
'uxd_side_clkack');
foreach(@clk){
@clkline = map {[split /_/,$_]} @clk;
}
foreach(@clkack){
@clkackline = map{[split /_/,$_]} @clkack;
}
#print Dumper @clkline;
$match = 0;
$clkack_row = @clkackline; #no. of row in clkackline
$clk_row = @clkline;
for ($i=0; $i<$clkack_row; $i++){
$clkackcolumn = @{$clkackline[$i]};
for ($j=0; $j<$clkackcolumn; $j++){
for ($m=0; $m<$clk_row; $m++){
$clkcolumn = @{$clkline[$m]};
for ($n=0; $n<$clkcolumn; $n++){
if ($clkline[$i][$j] eq $clkacline[$m][$n]){
$match = $match + 1;
print "$match\n";
}
}
}
}
}
我希望它循环@clkackline 数组并将其与@clkline 数组进行比较。如果它匹配,那么它将给出它有多少匹配,因此 $match 变量。
编辑:
我需要用'_'分割它,这样我才能得到元素除以另一个数组中的单词。例如:
$clk[0] = ux_prim_clk will result in;
$clkline[0][0] = ux, $clkline[0][1] = prim, $clkline[0][2] = clk.
然后我需要逐个元素但按顺序与@clkackline 数组进行比较。例如:
$clkline[0][0] = $clkackline[0][0],
$clkline[0][1] = $clkackline[0][1],
$clkline[0][2] = $clkackline[0][2].
但另一个问题是我需要将@clkline 与 clkackline 中的所有元素进行比较。但由于大小将成为约束,所以我需要移动@clkackline 以与@clkline 匹配,反之亦然。
例如:首先检查:
$clkline[1][0] = $clkackline[0][0],
$clkline[1][1] = $clkackline[0][1],
$clkline[1][2] = $clkackline[0][2].
第二次检查:
$clkline[1][0] = $clkackline[0][1],
$clkline[1][1] = $clkackline[0][2],
$clkline[1][2] = $clkackline[0][3].
这当然只是一个例子,但你可以看到我需要它来删除 $clkackline[0] 中的第一列。
然后我需要计算它将匹配多少的百分比。
例如:
ux_prim_clk vs uxd_prim_clkack will return 33.33%.
然后将匹配度最高的元素存储在另一个数组中(例如:@clknew)
解决方案
我认为您可能过于复杂了您的问题,为了回答比较两个列表的原始问题,我有一个脚本可以比较两个列表并告诉您每个列表中不存在的内容。如果这正是您需要的,请告诉我,我们可以对其进行更改以适合您的使用。与 Perl 中的几乎所有内容一样,可能有一个模块可以为您完成所有这些工作。
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw(any);
my @list1 = ('prescc_ux_aux_clk',
'prescc_ux_prim_clk',
'usb2_phy_side_clk',
'usb3_phy_side_clk',
'ux_prim_clk',
'ux_side_clk',
'ux_xtal_frm_refclk',
'uxd_aux_clk',
'uxd_pgcb_clk',
'uxd_prescc_aux_clk',
'uxd_prim_clk',
'uxd_side_clk',
'uxd_suspend_clk'
);
my @list2 = ('ccu_ux_xtal_frm_refclk_ack',
'ibbs_ux_prim_clkack',
'sbr_ux_side_clkack',
'uxd_aux_clkack',
'uxd_pgcb_clkack',
'uxd_prim_clkack',
'uxd_side_clkack'
);
print "\n==== LIST 1 TO LIST 2 COMPARISON, Does not exist in list 2 ====\n";
foreach my $first (@list1) {
if ( any { $_ eq $first} @list2) { next; }
else { print $first . "\n"; }
}
print "\n==== LIST 2 TO LIST 1 COMPARISON, Does not exist in list 1 ====\n";
foreach my $first (@list2) {
if ( any {$_ eq $first} @list1) { next; }
else { print $first . "\n"; }
}
推荐阅读
- elasticsearch - 将标记连接成单个标记
- java - java中另一个switch函数中的“switch”函数
- angular - Angular 服务在后续调用中变得未定义
- flutter - Flutter,首次启动时显示 ToolTips
- amazon-s3 - Kafka 将消息从 s3 连接器连接到 aws
- php - 来自 MySQL 的 FCM 令牌数组?
- node.js - AWS Serverless:令牌认证
- spring-boot - 如何在apache flink上运行spring boot jar?
- c++ - 单向排序的 C++ 节点
- python - python中的polyfit二次图