如何按给定顺序对列表进行排序?

编程入门 行业动态 更新时间:2024-10-10 19:18:49
本文介绍了如何按给定顺序对列表进行排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试执行以下操作.我有一个预定义的列表,可以用作给定列表上的排序依据".

I'm trying to do the following. I have a predefined list to be used as a "order by" on an given list.

my @orderby = ( 'car', 'boat', 'chicken', 'cat', 'dog', 'mouse'); or my %orderby = ( 'car' => 0, 'boat' => 1, 'chicken' => 2, 'cat' => 3, 'dog' => 4, 'mouse' => 5); my @list = ('boat', 'car', 'mouse', 'chicken');

我尝试了无数种方式对它进行排序,但我没有得到想要的东西.我已经在Google和此处进行了搜索,但是没有找到答案.

I tried infinite ways to sort it and I didn't get what I want. I have searched on google, and here, but I did not found the answer.

@list需要以这种方式排序:

@list need to be sorted in that way:

sort @list using %orderby

排序后我想要的打印件:

The print that I want after the sort:

car, boat, chicken, mouse

顺便说一句,@ list可以有重复的条目:

BTW, @list can have duplicated entries:

my @list = ('boat', 'car', 'mouse', 'chicken', 'mouse', 'car');

在这种情况下,打印件必须为:

In that case, the print need to be:

car, car, boat, chicken, mouse, mouse

你们有解决方案吗? 或另一种方法. 谢谢!

Do you guys have a solution for that? or maybe another approach. Thanks!!

推荐答案

my @orderby = qw( car boat chicken cat dog mouse ); my @list = qw( boat car mouse chicken ); my %orderby = map { $orderby[$_] => $_ } 0..$#orderby; my @sorted = sort { $orderby{$a} <=> $orderby{$b} } @list;

或者如果您想弄乱人们的思想,

Or if you want to mess with people's minds,

my @orderby = qw( car boat chicken cat dog mouse ); my @list = qw( boat car mouse chicken ); my %counts; ++$counts{$_} for @list; my @sorted = map { ($_) x ($counts{$_}||0) } @orderby;

更多推荐

如何按给定顺序对列表进行排序?

本文发布于:2023-11-29 08:56:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1645931.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:顺序   列表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!