Pergunta

Alguém pode sugerir um módulo bom em perl que pode ser usado para coleção de loja de objetos?

Ou é ARRAY um substituto bom o suficiente para a maioria das necessidades?

Update: Estou à procura de uma classe coleções porque eu quero ser capaz de fazer uma operação como propriedade nível do conjunto de computação de cada elemento.

Desde que eu preciso para executar muitas dessas operações, assim como eu poderia escrever uma classe que pode ser prorrogado por objetos individuais. Esta classe irá, obviamente, o trabalho com matrizes (ou pode ser hashes).

Foi útil?

Solução

Existem módulos de recolha para estruturas mais complexas, mas é o estilo comum em Perl usar matrizes para arrays, pilhas e listas. Perl foi construído em funções para a utilização da matriz como uma pilha ou uma lista:. Empurrão / POP, deslocamento / unshift, tala (inserir ou remover no meio) e a forma foreach para iteração

Perl também tem um mapa, chamado de hashmap que é o equivalente a um dicionário em Python -. Permitindo que você tenha uma associação entre uma única chave e um valor único

desenvolvedores Perl muitas vezes compor essas duas estruturas de dados para construir o que eles precisam - vários valores precisa? Armazenar referências matriz na parte do valor do hashtable (Mapa). Árvores podem ser construídas de maneira similar -. Se você precisa de chaves únicas, o uso múltiplo-níveis de HashMaps, ou se você não usar referências aninhadas matriz

Estes dois tipos de coleção primitivos em Perl não tem uma api Orientada a Objetos, mas eles ainda são coleções.

Se você olhar no CPAN você provavelmente encontrará módulos que fornecem outras estruturas de dados Object Oriented, ele realmente depende de sua necessidade. Existe uma estrutura de dados específico que você precisa, além de uma lista, Pilha ou do Mapa? Você pode obter uma resposta mais precisa (por exemplo, um módulo específico), se você está perguntando sobre uma estrutura de dados particular.

esqueci de mencionar, se você está procurando exemplos de código pequenos através de uma variedade de línguas, Pléac (Exemplos de programação idioma Alike Receitas) é um recurso decente.

Outras dicas

Gostaria segundo o comentário de Michael Carman: por favor, não use o termo "HashMap" ou "mapa" quando você quer dizer um hash ou matriz associativa. Especialmente quando Perl tem uma função de mapa; que apenas confunde as coisas.

Dito isto, resposta de Kyle Burton é fundamentalmente som: ou um hash ou uma matriz, ou uma estrutura complexa composta por uma mistura dos dois, é geralmente suficiente. Perl groks OO, mas não aplicá-la; chances são de que uma estrutura de dados vagamente definida pode ser bom o suficiente para o que você precisa.

Na falta deste, por favor definir mais exatamente o que você quer dizer com "a propriedade nível do conjunto de computação de cada elemento". E tenha em mente que Perl tem palavras-chave como mapa e grep que permitem que você faça funcionais coisas de programação, como por exemplo.

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;

Leitura de trás para frente, neste particular Schwarztian transformar faz três coisas:

3) É preciso uma chave para $ record, passa pelo SKUs definido nesta estrutura arbitrária, e trabalha fora o número total eo valor total das transações. Ele retorna um array anônimo contendo a chave, o número de transações eo valor total.

2) O próximo bloco leva em uma série de arrayrefs e classifica-a) em primeiro lugar através da comparação do valor total, numericamente, em ordem decrescente de ordens; b) Se os valores forem iguais, comparando o número de operações, numericamente em ordem decrescente; e c) se isso falhar, classificando asciibetically sobre o nome associado a este fim.

1) Por fim, pegue a chave para US $ registro a partir da estrutura de dados classificados e retornar isso.

Pode muito bem ser que você não precisa criar uma classe separada para fazer o que quiser.

Eu usaria normalmente uma @array ou um hash%.

Quais são as características que você está procurando que não são fornecidos por aqueles?

basear a sua decisão sobre como você precisar acessar os objetos. Se a empurrá-los para um array, indexando em, popping / deslocando-os trabalhos, em seguida, usar uma matriz. Caso contrário botar-los por alguma chave ou organizá-los em uma árvore de objetos que atenda às suas necessidades. Um hash de objetos é uma maneira muito simples, poderoso e altamente otimizado de fazer as coisas em Perl.

Desde matrizes Perl pode facilmente ser anexadas a, redimensionada, ordenados, etc., eles são bons o suficiente para a maioria das necessidades "coleção". Nos casos em que você precisa de algo mais avançado, um hash geralmente fazem. Eu não recomendo que você vai olhar para um módulo de coleta até que você realmente necessidade -lo.

De qualquer um array ou um hash pode armazenar uma coleção de objetos. Uma classe pode ser melhor se você quiser trabalhar com a classe em certos aspectos, mas você tem que nos dizer o que esses caminhos estão diante de nós poderia fazer quaisquer boas recomendações.

i iria ficar com um array ou um hash.

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

e

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

fonte

Depende muito; há Sparse Matrix módulos, algumas formas de persistência , a novo estilo de OO etc A maioria das pessoas só homem perldata , perllol , perldsc para responder a sua questão específica com uma estrutura de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top