获取数组中最小非负数的索引?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

我有一个像这样的数组

@array = ('3', '4', '71', '1', '-598', '-100203');

我想在数组中的整数中找到最小非负数的索引。

就本案而言:

  • 最小非负数=1
  • 最小非负数指数=3
提问于
用户回答回答于

你想reduce(O(N)sort(N对数N)!

use List::Util qw( reduce );

my $i =
   reduce { $array[$a] <= $array[$b] ? $a : $b }
      grep { $array[$_] >= 0 }
         0..$#array;

如果你希望获得最佳性能,下面的内容将使你更加接近:

use Config     qw( %Config );
use List::Util qw( minstr );

my $i =
   unpack "x$Config{ivsize} J",
      minstr
         map { pack 'J> J', $array[$_], $_ }
            grep { $array[$_] >= 0 }
               0..$#array;
用户回答回答于

诀窍是对索引编号列表进行排序,然后选择第一个:

my $ix = (sort { $array[$a]) <=> $array[$b] } grep { $array[$_] >= 0 } 0..$#array)[0];

所属标签

可能回答问题的人

  • 学生

    3 粉丝476 提问7 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • 最爱开车啦

    8 粉丝503 提问5 回答
  • 骑牛看晨曦

    4 粉丝522 提问5 回答

扫码关注云+社区

领取腾讯云代金券