[Roma.pm] domanda

Flavio Poletti polettix at gmail.com
Fri Sep 11 01:58:22 PDT 2009


In generale la mappatura indice -> valore non è invertibile, ad esempio con
array così:
@array = (1, 1, 1, 1, 1);

dove si trova "1"?

Se vuoi l'indice del primo elemento uguale a quello che cerchi, puoi usare
first_index (alias firstids) da
List::MoreUtils<http://search.cpan.org/perldoc?List::MoreUtils>
:

$indice = first_idx { $_ == $elemento } LISTA;

Al posto di "==" puoi ovviamente mettere "eq" ed in generale puoi mettere un
qualsiasi blocco di test (ad esempio per cercare il primo elemento pari,
positivo, ecc.)

Se sei sicuro che la mappatura sia invertibile - ossia la lista/array
contiene solamente valori unici - e devi trovare parecchie inversioni
potresti utilizzare una hash, ad esempio:

  my @array = (...);

  my %indice_di;
  @indice_di{@array} = 0 .. $#array;

  # oppure, più concisamente
  my %indice_di = map { $array[$_] => $_ } 0 .. $#array;

  $indice = $indice_di{$elemento};

Da notare che se hai elementi ripetuti questa tecnica ti darà l'ultimo
indice disponibile, non il primo come first_index().

Ciao,

   Flavio.


2009/9/11 <kanak at perl.it>

> qual'e' la variabile che indica la posizione di un elemento dentro un
> array?
>
> in pratica l'opposto di:
> " $lista[x] " che corrisponde ad " elemento "
>
> io vorrei una funzione tipo:
>  "posizione(elemento, @lista) che corrisponde ad " x "
>
>  grazie
>
> _______________________________________________
> Roma mailing list
> Roma at pm.org
> http://mail.pm.org/mailman/listinfo/roma
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/roma/attachments/20090911/82733c5e/attachment.html>


More information about the Roma mailing list