Regex 根据函数的大小对函数定义进行排序
我从一个.C文件中获取函数定义的大小,并在一个文本文件中列出所有函数定义的名称 代码 我想根据它的大小来分类Regex 根据函数的大小对函数定义进行排序,regex,perl,Regex,Perl,我从一个.C文件中获取函数定义的大小,并在一个文本文件中列出所有函数定义的名称 代码 我想根据它的大小来分类 您可以使用如下特殊功能: sub by_size { $a =~ /Function \s+ has (\d+\) lines./; my $a_lines = $1; $b =~ /Function \s+ has (\d+\) lines./; my $b_lines = $1; return $a_lines <=> $b_li
您可以使用如下特殊功能:
sub by_size {
$a =~ /Function \s+ has (\d+\) lines./;
my $a_lines = $1;
$b =~ /Function \s+ has (\d+\) lines./;
my $b_lines = $1;
return $a_lines <=> $b_lines;
}
@sorted_output = sort by_size @output;
说明:
这一行告诉sort使用by_size函数进行排序:
@sorted_output = sort by_size @output;
by_size函数有两个输入:称为$a和$b的全局变量。这些都是通过分类传递给它的
此函数处理$a和$b并返回值1、0或-1,表示:
-1->$a在$b之前
0->$a等于$b,用于此排序。
1->$a在$b之后
在这种特定情况下,by_size通过从字符串$a和$b中提取行数来确定顺序。您可以使用如下特殊函数:
sub by_size {
$a =~ /Function \s+ has (\d+\) lines./;
my $a_lines = $1;
$b =~ /Function \s+ has (\d+\) lines./;
my $b_lines = $1;
return $a_lines <=> $b_lines;
}
@sorted_output = sort by_size @output;
说明:
这一行告诉sort使用by_size函数进行排序:
@sorted_output = sort by_size @output;
by_size函数有两个输入:称为$a和$b的全局变量。这些都是通过分类传递给它的
此函数处理$a和$b并返回值1、0或-1,表示:
-1->$a在$b之前
0->$a等于$b,用于此排序。
1->$a在$b之后
在这种特定情况下,by_size通过从字符串$a和$b中提取行数来确定顺序。尝试按如下方式更改打印循环
foreach my $function (sort {$function_size{$a} <=> $function_size{$b}} keys %function_size) {
print FILE2 "Function $function has $function_size{$function} lines.\n";
}
它将根据其值(即大小)对%function\u size的键进行数字排序。尝试如下更改打印循环
foreach my $function (sort {$function_size{$a} <=> $function_size{$b}} keys %function_size) {
print FILE2 "Function $function has $function_size{$function} lines.\n";
}
它将根据其值(即大小)对%function\u size的键进行数字排序。谢谢您的解释。两个答案都很好。但是我正在检查第一个,因为它有点小和简单,答案是第一个。但是你为这个问题提供了更好的逻辑。我明白了。谢谢你的解释。两个答案都很好。但是我正在检查第一个,因为它有点小和简单,答案是第一个。但是你为这个问题提供了更好的逻辑。我明白了。thanks@Ad-不客气。很高兴它对你有用。@Ad vic不客气。很高兴它对你有用。
foreach my $function (sort {$function_size{$a} <=> $function_size{$b}} keys %function_size) {
print FILE2 "Function $function has $function_size{$function} lines.\n";
}