📜  珀尔 |数组排序

📅  最后修改于: 2022-05-13 01:55:12.031000             🧑  作者: Mango

珀尔 |数组排序

Perl 有一个内置的 sort()函数来对一组字母和数字进行排序。当一个数组被传递给 sort()函数时,它返回一个排序后的数组。

Perl 中的数组排序可以通过多种方式完成:

  1. 使用 ASCII 值对数组进行排序
  2. 比较函数的使用 (cmp)
  3. 排序的字母顺序(不区分大小写)
  4. 数字数组的排序
使用 ASCII 值对数组进行排序

由于大写字母的 ASCII 值小于小写字母的 ASCII 值,因此所有大写字母的值都排在小写字母开始之前。
例子:

#!/usr/bin/perl
  
# Initializing an array
@country = ('India', 'America', 'london', 
            'france', 'bangladesh');
  
# Printing sorted array
print sort @country;
输出:
AmericaIndiabangladeshfrancelondon

以下是上述程序的工作原理:
步骤 1-由于大写字母(A 从 65 开始)的 ASCII 值小于小写字母(a 从 97 开始),所有大写字母单词都排在小写字母单词之前。
步骤 2-在上面的示例中,数组具有国家/地区的名称,其中少数单词以大写字母开头,而另一个以小写字母开头,因此在对具有小写字母的值进行排序之前,先对所有大写字母的值进行排序。

比较函数的使用 (cmp)

在这种类型的排序技术中,迭代器遍历原始数组的每两个元素。在每次迭代中,它将第一个值放入变量 $a 中,将第二个值放入变量 $b 中。现在,调用 cmp函数并将这些值以块的形式传递。现在,如果 $a 的内容应保留在左侧,此函数将返回 -1,而如果 $b 的内容应保留在左侧,则返回 1。
此函数可用于对 Array 进行降序排序。 sort()函数默认使用 cmp() 但不使用块。
例子:

#!/usr/bin/perl
  
# Initializing an array
@fruits = ('chikoo', 'apple', 'banana',
           'orange', 'grapes');
  
# Sorting array in ascending order
@x = sort { $a cmp $b } @fruits;
  
# Sorting array in descending order
@y = sort { $b cmp $a } @fruits;
  
# Printing sorted array
print "Array in ascending order: @x\n";
  
# Printing sorted array
print "Array in descending order: @y";
输出:
Array in ascending order: apple banana chikoo grapes orange
Array in descending order: orange grapes chikoo banana apple

以下是上述程序的工作原理:
步骤 1-使用水果名称初始化数组
第 2 步 -它从 $a 中的左侧和 $b 中的右侧获取值,并使用 cmp函数比较这两个值。所以,在上面的例子中,'Grapes' 与 'chikoo' 进行了比较。

排序的字母顺序(不区分大小写)

为了对包含大写和小写值的数组进行排序,需要将这些值转换为大写或小写以进行比较。此外, cmp()函数将用于对数组进行排序。

注意:数组的原始值不会被修改。
例子:

#!/usr/bin/perl
  
# Initializing an array
@fruits = ('Chikoo', 'Apple', 'banana',
           'orange', 'Grapes');
  
# Converting values to lower case for
# comparison before sorting
@x = sort { lc($a) cmp lc($b) } @fruits;
  
# Converting values to upper case for
# comparison before sorting
@y = sort { uc($a) cmp uc($b) } @fruits;
  
# Printing sorted array
print "Array after converting to lower case: @x\n";
  
# Printing sorted array
print "Array after converting to upper case: @y\n";
输出:
Array after converting to lower case: Apple banana Chikoo Grapes orange
Array after converting to upper case: Apple banana Chikoo Grapes orange

以下是上述程序的工作原理:
第 1 步 -使用值初始化数组。
步骤 2-将值一一转换为小写和大写,而不管它们的原始大小写,然后使用 cmp函数进行比较并按升序排序。

注意:可以看出两种情况下的输出没有区别

数字数组的排序

如果使用 sort函数对包含数字的数组进行排序,则它将数组中的每个值都作为字符串,因此 12 将放在 2 之前。因此,要将值视为数字,在排序中使用 spaceship 运算符() 而不是 cmp函数。该运算符将其操作数视为数字并将数据排序为数字。

#!/usr/bin/perl
  
# Initializing an array
@n = (12, 44, 2, 5, 25, 7, 96, 1);
  
# Printing Original Array
print "Original Array: @n\n";
  
# Sorting numbers with use of
# spaceship operator
@x = sort { $a <=> $b } @n;
  
# Printing sorted array
print "Array after Sorting: @x";
输出:
Original Array: 12 44 2 5 25 7 96 1
Array after Sorting: 1 2 5 7 12 25 44 96

以下是上述程序的工作原理:
步骤 1-用数值初始化一个数组。
第 2 步 -使用 spaceship运算符将值视为数字并根据 $a 和 $b 中的值返回 1、0、-1。