Perl에서 혼합 문자열을 정렬하는 방법은 무엇입니까? (코드 예)

青灯夜游
풀어 주다: 2019-04-16 11:40:23
원래의
3131명이 탐색했습니다.

Perl에서 정렬은 미리 정의된 함수 "sort"를 사용하여 수행할 수 있습니다. 이 함수는 전달된 배열을 정렬하기 위해 Quicksort 알고리즘을 사용합니다. 다음 기사에서는 sort() 함수를 사용하여 혼합 문자열(예: 영숫자 문자열)이 포함된 배열을 다양한 방법으로 정렬하는 방법을 소개합니다. [동영상 튜토리얼 추천: Perl 튜토리얼]

Perl에서 혼합 문자열을 정렬하는 방법은 무엇입니까? (코드 예)

방법 1: sort()+substr() 함수

숫자를 사용하여 문자열을 비교하려면 문자열에서 숫자를 얻는 것이 매우 중요합니다. . 이 숫자를 기준으로 문자열 배열을 정렬할 수 있습니다.

substr() 함수를 사용하면 문자열에서 이러한 숫자를 추출할 수 있습니다. 이 함수는 숫자를 제외한 문자열의 문자 수를 인수로 사용합니다.

참고: 배열의 모든 영숫자 문자열은 크기가 동일해야 합니다.

예:

use strict; 
use 5.010; 
  
# 用字母数字字符串定义数组值
my @x = qw(prin_4 Keys_8 pubg_12); 
print "原数组:\n";
print join " , ", @x;  
# 使用sort()和substr()函数对数组进行排序 
my @y = sort { substr($a, 5) <=> substr($b, 5) } @x; 
  
# 输出排序的数组
print "\n\n排序的数组:\n";
print join " , ", @y;
로그인 후 복사

출력:

原数组:
prin_4 , Keys_8 , pubg_12

排序的数组:
prin_4 , Keys_8 , pubg_12
로그인 후 복사

방법 2: sort() + 정규식

영숫자 문자열이 약간 복잡하면 위 코드를 실행하는 것이 어려운 작업이므로 순서대로 더 간단합니다. , 정규식을 사용할 수 있습니다.

예: 배열에 "Keys_8_keys"가 포함되어 있으면 이 경우를 처리하기 어렵기 때문에 문자열의 숫자를 올바르게 필터링하려면 정규식을 사용할 수 있습니다.

참고: 이 방법은 영숫자 문자열의 크기가 다른지 여부는 상관하지 않습니다.

예:

use strict; 
use 5.010; 
  
# Sample string to extract  
# number from 
my $str = &#39;Key_8_key&#39;; 
  
# Regular expression to extract the number 
my ($number) = $str =~ /(\d+)/; 
  
# 输出提取的数字
print "从Key_8_key中提取的数字是:$number\n"; 
  
# 用字母数字字符串定义数组
my @x = qw(pri_4 Key_8_key pubg_12); 
  
# 排序前的数组
print "\n排序前的数组:\n"; 
print join " , ", sort @x; 
  
# 使用正则表达式
my @y = sort { ($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0] } @x; 
  
# 排序后数组
print "\n\n排序后数组\n"; 
print join " , ", @y;
로그인 후 복사

출력:

从Key_8_key中提取的数字是:8
排序前的数组:
Key_8_key , pri_4 , pubg_12
排序后数组
pri_4 , Key_8_key , pubg_12
로그인 후 복사

참고: 배열에 일부 문자열에 숫자가 없는 문자열이 포함된 경우 숫자 대신 0을 사용할 수 있습니다. 문자열에 숫자가 없는지 확인하려면 다음 코드를 사용하세요.

my @y = sort { (($a =~ /(\d+)/)[0] || 0)  (($b =~ /(\d+)/)[0] || 0) } @x;
로그인 후 복사

Example:

#!/usr/bin/perl 
use strict; 
use 5.010; 
  
# 混合类型字符串的数组
my @x = qw(pri_4 Key pubg_12); 
  
# 使用正则表达式
my @y = sort { (($a =~ /(\d+)/)[0] || 0) <=>  
               (($b =~ /(\d+)/)[0] || 0) } @x; 
   
# 输出排序的数组
print "排序后数组:\n"; 
print join " , ", @y;
로그인 후 복사

Output:

排序后数组:
Key , pri_4 , pubg_12
로그인 후 복사

위는 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 관련 튜토리얼 열을 주의 깊게 살펴보세요! ! !

위 내용은 Perl에서 혼합 문자열을 정렬하는 방법은 무엇입니까? (코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿