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的元素而不是分配给它们 – 但找到了合适的替代方案.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |