Perl 기본 배열 정렬 방법 소개
Perl에sort라는 내장 함수가 있습니다. 의심할 여지없이 하나의 그룹을 정렬할 수 있습니다.가장 간단한 형식은 정렬된 요소로 구성된 그룹을 되돌려주는 그룹을 전달하는 것입니다. @sorted = sort @original.
ASCII 코드 기반 정렬
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Data::Dumper qw(Dumper);
my @words = qw(foo bar zorg moo);
say Dumper \@words;
my @sorted_words = sort @words;
say Dumper \@sorted_words;
위의 예는 인쇄될 것이다
$VAR1 = [
'foo',
'bar',
'zorg',
'moo'
];
$VAR1 = [
'bar',
'foo',
'moo',
'zorg'
];
첫 번째 출력은 정렬 전의 그룹을 표시하고, 두 번째는 정렬 후의 것이다.이것은 가장 간단한 상황이지만, 아마도 네가 원하는 것은 아닐 것이다.예를 들어 만약 어떤 단어들이 대문자로 시작한다면 어떻게 합니까?
my @words = qw(foo bar Zorg moo);
@sorted_names의 결과는 다음과 같습니다.
$VAR1 = [
'Zorg',
'bar',
'foo',
'moo'
];
대문자로 시작하는 단어가 1위에 올랐다는 것을 알게 될 것이다.이것은sort가 기본적으로 ASCII 코드에 따라 정렬하기 때문에 모든 대문자가 소문자 앞에 배열되어 있기 때문입니다.비교 함수
Perl의sort의 작업 방식은 이렇습니다. 원시 수조의 두 원소를 두루 훑어봅니다.매번 왼쪽 값을 변수 $a에 넣고 오른쪽 값을 변수 $b에 넣는다.그리고 비교 함수를 호출합니다.만약 $a의 내용이 왼쪽에 있어야 한다면'비교 함수'는 1을 되돌려줍니다.만약 $b가 왼쪽에 있어야 한다면 -1, 둘이 같으면 0을 되돌려줍니다.
보통 비교 함수를 볼 수 없습니다. sort는 ASCII 코드에 따라 값을 비교합니다. 그러나 당신이 원한다면 현저하게 쓸 수 있습니다.
sort { $a cmp $b } @words;
이 코드는 블록을 사용하지 않은sort@words와 같은 효과를 낼 수 있습니다.기본perl은 cmp를 비교 함수로 사용합니다.이것은 바로 cmp가 이 안에서 우리가 필요로 하는 일을 할 수 있기 때문이다.이것은 양쪽 문자열의 값을 비교합니다. 왼쪽 파라미터가 오른쪽 파라미터보다 작으면 1을 되돌려줍니다.왼쪽 매개 변수가 오른쪽 매개 변수보다 크면 -1로 돌아갑니다.같으면 0으로 돌아갑니다.
알파벳순으로 배열하다
문자열의 대소문자를 무시하고 정렬하고 싶다면, 일반적인 알파벳 순서라고 하면 다음 예와 같이 할 수 있다.
my @sorted_words = sort { lc($a) cmp lc($b) } @words;
여기서 비교하기 위해서, 우리는lc 함수를 호출하여 매개 변수의 소문자 버전을 되돌려줍니다.그리고 cmp는 이 소문자 버전을 비교하여 원시 문자열을 누가 먼저, 누가 뒤에 있는지 결정합니다.결국
$VAR1 = [
'bar',
'foo',
'moo',
'Zorg'
];
Perl 쌍 수치 정렬만약 수치 그룹이sort를 사용하여 기본 정렬을 한다면, 결과는 우리가 기대하는 것이 아닐 수도 있습니다.
my @numbers = (14, 3, 12, 2, 23);
my @sorted_numbers = sort @numbers;
say Dumper \@sorted_numbers;
$VAR1 = [
12,
14,
2,
23,
3
];
곰곰이 생각해 보면, 이것은 결코 이상하지 않다.비교 함수가 12와 3을 보았을 때 문자열로 비교합니다.이것은 두 문자열의 첫 번째 문자인'1'과'3'를 비교한다는 것을 의미한다.ASCII 코드 테이블에서 "1"은 "3"앞에 있기 때문에 "12"문자열은 "3"문자열 앞에 있습니다.Perl은 숫자에 따라 이 값을 정렬하고 싶다는 것을 신기하게 알아맞히지 못할 것이다.
비록 우리는 비교 함수를 써서 숫자에 따라 두 개의 값을 비교할 수 있다.그러나 여기서 우리는 <=>(우주선 조작부호라고도 부른다)을 사용하는데, 그것은 숫자에 따라 두 개의 매개 변수를 비교하고 1, -1 또는 0으로 되돌아간다.
my @sorted_numbers = sort { $a <=> $b } @numbers;
결과:
$VAR1 = [
2,
3,
12,
14,
23
];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
cowsay로 현장 고양이에 요시! 되고 싶은 건업무 중에도 현장 고양이에 요시! 하고 싶었기 때문에, cowsay 를 사용해 어떻게든 해 보았습니다. cowsay는 말할 것도없이 오징어 한 서버에 적합한 매혹적인 도구입니다. 살벌한 우리 마음에 일복의 청량을 줍...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.