加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl排序数组:保留一个以#就地开头的项目

发布时间:2020-12-15 23:27:31 所属栏目:大数据 来源:网络整理
导读:有没有办法修改任何字符串以#开头的排序被忽略,即保持其索引? 例如: my @stooges = qw( Larry Curly Moe Iggy );my @sorted_stooges = sort @stooges; @sorted_stooges应该给: CurlyIggyLarryMoe 现在,如果我将#添加到Curly my @stooges = qw( Larry #Cur
有没有办法修改任何字符串以#开头的排序被忽略,即保持其索引?

例如:

my @stooges = qw(
        Larry
        Curly
        Moe
        Iggy
    );

my @sorted_stooges = sort @stooges;

@sorted_stooges应该给:

Curly
Iggy
Larry
Moe

现在,如果我将#添加到Curly

my @stooges = qw(
            Larry
            #Curly
            Moe
            Iggy
        );

my @sorted_stooges = sort @stooges;

我想@sorted_stooges是:

Iggy
#Curly
Larry
Moe

解决方法

就地解决方案:

my @indexes_to_sort = grep { $array[$_] !~ /^#/ } 0..$#array;
my @sorted_indexes = sort { $array[$a] cmp $array[$b] } @indexes_to_sort;
@array[@indexes_to_sort] = @array[@sorted_indexes];

要么

my @indexes_to_sort = grep { $array[$_] !~ /^#/ } 0..$#array;
@array[@indexes_to_sort] = sort @array[@indexes_to_sort];

要么

my $slice = sub { @_ }->( grep { !/^#/ } @array );
@$slice[0..$#$slice] = sort @$slice;

(不幸的是,@ $slice = sort @ $slice;不起作用 – 它取代了@ $slice的元素而不是分配给它们 – 但找到了合适的替代方案.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读