两个字符串之间的 perl 计数不匹配
perl count mismatch between two strings
我只需要计算两个字符串之间的不匹配。假设:
my $s1 = "ATCG";
my $s2 = "ATTG";
这应该给出:1 作为不匹配。不用找位置或不匹配的地方。
我正在寻找快速的方法。我认为拆分成数组并在循环中匹配或使用 substr 匹配每个位置可能会很慢,因为需要检查超过十亿对。谢谢
只需将两个字符串异或。结果中的每个 NUL 字符代表两个字符串中字符相同的位置。
my ($s1, $s2) = qw( ATCG ATTG );
my $count = ( $s1 ^ $s2 ) =~ tr/[=10=]//c;
print "$count\n"; # Prints "1"
注意:如果你要重复比较一个字符串,将它和你正在比较的字符串传递给 utf8::downgrade
以确保 ^
尽可能快是。
utf8::downgrade($s1); # Change the internal format in which
utf8::downgrade($s2); # the strings are stored to speed up $s1^$s2.
如果任一字符串包含 U+00FF 以上的 UNICODE 字符,则为 useless/wasteful。
我只需要计算两个字符串之间的不匹配。假设:
my $s1 = "ATCG";
my $s2 = "ATTG";
这应该给出:1 作为不匹配。不用找位置或不匹配的地方。
我正在寻找快速的方法。我认为拆分成数组并在循环中匹配或使用 substr 匹配每个位置可能会很慢,因为需要检查超过十亿对。谢谢
只需将两个字符串异或。结果中的每个 NUL 字符代表两个字符串中字符相同的位置。
my ($s1, $s2) = qw( ATCG ATTG );
my $count = ( $s1 ^ $s2 ) =~ tr/[=10=]//c;
print "$count\n"; # Prints "1"
注意:如果你要重复比较一个字符串,将它和你正在比较的字符串传递给 utf8::downgrade
以确保 ^
尽可能快是。
utf8::downgrade($s1); # Change the internal format in which
utf8::downgrade($s2); # the strings are stored to speed up $s1^$s2.
如果任一字符串包含 U+00FF 以上的 UNICODE 字符,则为 useless/wasteful。