카테고리 없음

[펄] 배열의 해시를 올바르게 처리하는 방법은 무엇입니까?

행복을전해요 2021. 2. 9. 12:43

Gilles는 이미 현재 데이터 구조를 사용하는 방법을 설명 했지만 다른 데이터 구조를 모두 사용하는 것이 좋습니다. 단순 해시입니다.

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

my %answers = (
    "Why do you study here?" => "bla",
        "What are your hobbies?" => "blabla"
        );
        
        while (my ($question, $answer) = each %answers) {
            say "Question: $question";
                say "Answer: $answer";
                }
                

산출:

Question: Why do you study here?
Answer: bla
Question: What are your hobbies?
Answer: blabla

각각 하나의 키 / 값 쌍만 포함하는 해시 배열보다 작업하기가 더 쉽습니다.

특정 (정렬되지 않은) 순서로 해시를 반복하려는 경우 몇 가지 옵션이 있습니다. 단순한 솔루션은 액세스하려는 순서대로 키 배열을 유지하는 것입니다.

# In the order you want to access them
my @questions = ("What are your hobbies?", "Why do you study here?");

my %answers;
@answers{@questions} = ("blabla", "bla");

foreach my $question (@questions) {
    say "Question: $question";
        say "Answer: $answers{$question}";
        }
        

산출:

Question: What are your hobbies?
Answer: blabla
Question: Why do you study here?
Answer: bla

또 다른 옵션은 Tie :: IxHash (또는 더 빠른 XS 모듈 Tie :: Hash :: Indexed )를 사용하여 삽입 순서로 키에 액세스하는 것입니다.

use Tie::IxHash;

tie my %answers, "Tie::IxHash";

%answers = (
    "Why do you study here?" => "bla",
        "What are your hobbies?" => "blabla"
        );
        
        while (my ($question, $answer) = each %answers) {
            say "Question: $question";
                say "Answer: $answer";
                }
                

산출:

Question: Why do you study here?
Answer: bla
Question: What are your hobbies?
Answer: blabla
-------------------

$_{$key}$key해시 변수를 찾습니다 %_. $시작 부분 의시길 은 결과 유형이 스칼라임을 나타냅니다. 해시 여야 VAR{KEY}한다는 것을 결정하는 것은 구문 구조 입니다 VAR. 비록 $_%_이름과 같은 기호를 사용, 다른 sigils 그들 관계가없는 변수를 확인하십시오.

해시 참조 $_를 기본 해시로 역 참조해야합니다 . 이에 대한 구문은 $_->{$key}또는 ${$_}{$key}입니다.

주제에 대한보다 일반적인 프리젠 테이션은 참조 튜토리얼참조 하십시오 .

-------------------

의 요소가 @questions있는 해시에 대한 참조 , 해시 없습니다. 따라서 다음과 같이 사용해야합니다.

foreach (@questions) {
    my $key = (keys %$_)[0];
        print "\\section{$key}\n\n$_->{$key}\n\n";
        }
        

참조 를 만들고 사용하는 방법 perlref참조하십시오 .



출처
https://stackoverflow.com/questions/22050365