【问题标题】:sort function in Perl - random outputPerl 中的排序函数 - 随机输出
【发布时间】:2022-11-30 19:43:49
【问题描述】:

我正在尝试用 Perl 编写排序函数。我需要“name_iwant_last”将是排序哈希中的最后一个。

我的代码:

%libs = (
"00000000000","00000000000",
"aaaaaaaaaaa","aaaaaaaaaaa",
"AAAAAAAAAA","AAAAAAAAAA",
"name_iwant_last","name_iwant_last",
"zzzzzzzzzzzzz","zzzzzzzzzzzzz",
"ZZZZZZZZZZZ","ZZZZZZZZZZZ",
"9999999999","9999999999"
);

sub lib_sort {
  #print "cosa ordino ";
  #print $libs{$a};
  #print $libs{$b};
  #print "\n";
  return 1 if (index($libs{$a} , "name_iwant_last") != -1);
 return -1 if $libs{$a} < $libs{$b};
  return 0 if $libs{$a} == $libs{$b};
  return 1 if $libs{$a} > $libs{$b};
}

foreach my $lib (sort lib_sort values %libs) {
    print $lib;
    print "\n";
}

但是当我运行这段代码时……打印顺序是随机的……

预期的: 啊啊啊 啊啊啊…… 名字_iwant_last

结果: 随机的!!!

【问题讨论】:

    标签: sorting perl


    【解决方案1】:

    如果您将 use warnings 添加到您的代码中,那么您将看到一些这样的警告:

    参数“ZZZZZZZZZZZ”在排序第 20 行的数字 lt (<) 中不是数字。
    参数“AAAAAAAAAA”在排序第 20 行的数字 lt (<) 中不是数字。
    参数“zzzzzzzzzzzzz”在排序第 20 行的数字 lt (<) 中不是数字。
    参数“aaaaaaaaaaa”在排序第 20 行的数字 lt (<) 中不是数字。
    参数“name_iwant_last”在排序第 20 行的数字 lt (<) 中不是数字。

    您正在比较字符串,但您使用的是数字比较运算符(&lt;==&gt;)。如果您切换到使用字符串比较运算符(lteqgt),那么它将按预期工作。

    总是在你的代码中有 use warningsuse strict

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      相关资源
      最近更新 更多