문제
할 수 있는 누군가가는 모듈에서는 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");