문제

할 수 있는 누군가가는 모듈에서는 perl 를 저장하는 데 사용할 수 있습의 컬렉션을까?

또는 배열은 좋은 충분히 대체에 대한 대부분의 필요?

업데이트: 내가 찾는 것은 여성 컬렉션 클래스고 싶기 때문에 할 수 있는 작업과 같은 계산 컬렉션 수준의 제공에서 각각의 요소입니다.

이후 나를 수행할 필요가 많은 이러한 작업을 수도뿐만 아니라 클래스를 작성할 수 있는 확장에 의해 개별적 개체입니다.이 클래스는 물론 작품으로 배열(또는 해시).

도움이 되었습니까?

해결책

보다 복잡한 구조를위한 컬렉션 모듈이 있지만, 배열, 스택 및 목록에 배열을 사용하는 것은 Perl의 일반적인 스타일입니다. Perl은 배열을 스택 또는 목록으로 사용하기위한 기능을 내장되어 있습니다 : 푸시/팝, 시프트/미확인, 스플 라이스 (중간에 삽입 또는 제거) 및 반복을위한 foreach 양식.

Perl에는 또한 해시 맵이라는 맵이 있는데, 이는 파이썬의 사전과 동등한 해시 맵이있어 단일 키와 단일 값 사이에 연관성을 가질 수 있습니다.

Perl 개발자는 종종이 두 가지 데이터 구조를 작성하여 필요한 것을 구축합니다. 여러 값이 필요합니까? 해시 가능 (MAP)의 값 부분에 배열 참조를 저장하십시오. 나무는 비슷한 방식으로 내장 할 수 있습니다. 고유 키가 필요한 경우 여러 레벨의 해시 맵을 사용하거나 중첩 배열 참조를 사용하지 않으면됩니다.

Perl 의이 두 가지 원시 수집 유형에는 객체 지향 API가 없지만 여전히 컬렉션입니다.

CPAN을 살펴보면 다른 객체 지향 데이터 구조를 제공하는 모듈을 찾을 수 있습니다. 실제로 필요에 따라 다릅니다. 목록, 스택 또는 맵 외에 필요한 특정 데이터 구조가 있습니까? 특정 데이터 구조에 대해 묻는 경우보다 정확한 답변 (예 : 특정 모듈)을 얻을 수 있습니다.

다양한 언어에서 작은 코드 예제를 찾고 있다면 언급하는 것을 잊었습니다. 유쾌한 (프로그래밍 언어 사례 모두 같은 요리 책)은 괜찮은 자원입니다.

다른 팁

나는 두 번째 마이클 Carman 의 코멘트:를 사용하지 마십시오 기간"Hashmap"또는"지도할 때"말은 해시 또는 연관 배열입니다.특히 펄지 기능는 혼동하는 일이다.

즉,카일 Burton 의 반응은 근본적으로 사운드:또 해쉬 또는 배열,또는 복잡한 구조로 구성된 두 가지의 혼합물은 일반적으로 충분합니다.Perl groks OO 지만,을 적용하지 않다;기회는 느슨하게 정의된 데이터 구조에 좋은 수 있습니다 충분히 당신이 필요합니다.

실패,정의하시기 바랍 더 정확하게 당신이 무엇을 의미하는"계산 컬렉션 수준의 제공에서 각각의 요소"라고 할 것입니다.과 마음에 부담하는 Perl 과 같은 키워드 지도 grep 는 당신이 프로그래밍 기능과 같은 것들 예:

my $record = get_complex_structure();
# $record = {
#    'widgets' => {
#        name => 'ACME Widgets',
#        skus => [ 'WIDG01', 'WIDG02', 'WIDG03' ],
#        sales => {
#            WIDG01 => { num => 25, value => 105.24 },
#            WIDG02 => { num => 10, value => 80.02 },
#            WIDG03 => { num => 8,  value => 205.80 },
#        },
#    },
#    ### and so on for 'grommets', 'nuts', 'bolts' etc.
# }

my @standouts =
    map { $_->[0] }
    sort {
        $b->[2] <=> $a->[2] 
     || $b->[1] <=> $a->[1]
     || $record->{$a->[0]}->{name} cmp $record->{$b->[0]}->{name}
    }
    map {
        my ($num, $value);
        for my $sku (@{$record->{$_}{skus}}) {
            $num   += $record->{$_}{sales}{$sku}{num};
            $value += $record->{$_}{sales}{$sku}{value};
        }
        [ $_, $num, $value ];
    }
    keys %$record;

을 읽고 뒤에서 앞으로,특히 이 Schwarztian 변환 다음 세 가지 작업을 수행합니다:

3)그것은 키$레코드를 통해 간다 Sku 에서 정의는 임의의 구조,그리고 밖으로 작동 aggregate 번호 및 총 가치의 트랜잭션이 있습니다.그것은 반환하는 익명이 포함된 배열쇠,거래의 수 및 총 가치.

2)다음 블록에서의 수 arrayrefs 및 종류 그들에게)먼저를 비교하여 총 가치,수치적으로,내림차순으로 주문b)만약에 값이 같은 비교하여 거래의 수는,수적으로서 내림차순으로;c)실패하는 경우,정렬하여 asciibetically 에 이름과 연관이 순서입니다.

1)마지막으로,우리는 열쇠$에서 레코드 데이터를 정렬,구조 및 반환니다.

그것은 잘 될 수 있는지 설정할 필요가 별도의 클래스를 당신이 무엇을 원합니다.

나는 보통 @array 또는 %해시를 사용합니다.

그것들이 제공하지 않은 어떤 기능을 찾고 있습니까?

객체에 액세스하는 방법에 대한 결정에 근거하십시오. 배열에 밀어 넣고 인덱싱하고 팝업/이동하는 작업을 수행 한 다음 배열을 사용하십시오. 그렇지 않으면 어떤 키에 의해 해시를 해시하거나, 당신의 필요를 충족시키는 물체의 나무로 구성하십시오. 물체의 해시는 Perl에서 일을하는 매우 단순하고 강력하며 최적화 된 방법입니다.

Perl Array는 쉽게 추가, 크기 조정, 분류 등을 추가 할 수 있으므로 대부분의 "수집"요구에 충분합니다. 더 발전된 것을 필요로하는 경우 해시는 일반적으로 할 것입니다. 실제로 컬렉션 모듈을 찾는 것이 좋습니다. 필요 그것.

배열 또는 해시는 객체 모음을 저장할 수 있습니다. 특정 방식으로 수업과 함께 일하고 싶다면 수업이 더 나을 수 있지만 좋은 권장 사항을 만들기 전에 이러한 방법이 무엇인지 알려야합니다.

배열이나 해시를 고수 할 것입니다.

 @names = ('Paul','Michael','Jessica','Megan');

그리고

my %petsounds = ("cat" => "meow",
             "dog" => "woof",
             "snake" => "hiss");

원천

그것은 많은 것에 달려 있습니다. 거기 있습니다 드문 매트릭스 모듈, 일부 형태 고집, ㅏ 새로운 스타일의 oo 등 대부분의 사람들은 그냥 남자입니다 perldata, Perllol, perldsc 데이터 구조에 대한 특정 문제에 답변합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top