Domanda

Ho una stringa che voglio confrontare con un array di stringhe, e restituire l'elemento dell'array che più si avvicina.

posso scrivere un correlatore scorrevole che conta il numero di caratteri corrispondenti ad ogni passo e ritorna la correlazione max. Ma c'è un modo migliore?

Ad esempio:
control_string = drv_probability_1_max

Lista:
    burst_period_min /
max     duty_cycle_min /
max     probablility_0_min /
max     probablility_1_min / max

Dove idealmente ritorna "probablility_1_min / max"

È stato utile?

Soluzione

Altri suggerimenti

Si potrebbe essere alla ricerca di String::Similarity modulo.

Date un'occhiata al Text :: Levenshtein o Lista :: Confronta (String :: circa lo stesso metodo, ma un pacchetto più completo)

use strict; use warnings;

use Text::Levenshtein qw(distance);

my $ctl = "drv_probability_1_max";

my @list=qw|
burst_period_min/max
duty_cycle_min/max
probablility_0_min/max
probablility_1_min/max
|;

my @dist=distance($ctl,@list);

print "Levenshtein distances: @dist\n";

my $idmin=0;
$dist[$idmin] < $dist[$_] or $idmin = $_ for 1..$#dist;

print "\"$list[$idmin]\" seems the closest...\n\n\n";

Output:

Levenshtein distances: 16 16 10 9
"probablility_1_min/max" seems the closest...

Per saperne di più Levenshtein Distanza o implementare un algoritmo di Perl direttamente ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top