3 votes

Comment itérer sur un tableau dans une structure de données imbriquée ?

J'essaie d'analyser le fichier L'API de MediaWiki sortie avec format=yaml . Mon code YAML ressemble à quelque chose comme :

use YAML qw(Dump Bless Load);
use YAML::LoadURI;
use YAML::Tag;
my $yaml_hash = LoadURI($wiki_url);
my $id = $yaml_hash->{query}->{namespaces}->[0];
print $id;

C'est très bien, mais comment faire pour itérer sur la sortie YAML sans la forcer brutalement ? Ce serait une idée, mais de toute évidence, cela ne fonctionne pas.

my $id = $yaml_hash->{query}->{namespaces}-[*]->{id}

C'est ce que la Sortie YAML ressemble à :

---
query:
  namespaces:
    -
      id: -2
      case: first-letter
      '*': Media
      canonical: Media
    -
      id: -1
      case: first-letter
      '*': Special
      canonical: Special
    -
      id: 0
      case: first-letter
      '*':
          content:
    -
      id: 1
      case: first-letter
      '*': Talk
      subpages:
      canonical: Talk
    -
      id: 2
      case: first-letter
      '*': User
      subpages:
      canonical: User
    -
      id: 3
      case: first-letter
      '*': User talk
      subpages:
      canonical: User talk

4voto

Paul Points 5437

Est-ce que c'est ce que vous voulez ? Note : Je ne l'ai pas testé :

Objectif : quelque chose " Comme " $yaml_hash->{query}->{namespaces}-[*]->{id} -- sauf fonctionnels

Essayez ceci :

my @ids = map { $_->{id} } @{$yaml_hash->{query}->{namespaces}} ;

Cependant, une boucle for est probablement plus claire pour beaucoup de gens.

my @ids;
foreach my $ns ( @{$yaml_hash->{query}->{namespaces}} ){ push @ids, $ns->{id} }

Notez que je me base sur des connaissances générales en structure de données perl, et non pas sur des connaissances spécifiques à YAML.

On suppose que ' interrogation et espaces nominatifs Si ce sont des paramètres, vous devez les forcer brutalement à l'aide de boucles for-in ou while supplémentaires. Pour l'itération sur des hachages, voir keys() y each() en perldoc perlfunc .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X