Comment utiliser un script pour obtenir le nombre de caractères qui correspondent au contenu de la table de données avec le contenu de la deuxième table, quel que soit l'ordre, et renvoyer le numéro de ligne de la deuxième table avec les données les plus correspondantes.
Je n'écrirai que des comparaisons de boucles simples.
Comment peut-il être plus rapide si le nombre de chaînes à comparer est important.
Merci!
Par example,
chaîne pour la première table
"KDBAC"
"FLGHEK"
"ONLCQR"
"WVTZXR"
Chaîne pour la deuxième table
"ROMNLQ"
"DFBACE"
"LKGHJK"
"WVTZYX"
Peut-il y avoir des caractères en double dans les chaînes ?
Si aucune duplication n'est autorisée, vous pouvez essayer d'utiliser des tableaux associatifs et leurs opérations d'ensemble :
Names Default To Here(1);
dt = New Table("demo",
Add Rows(4),
New Column("A", Character, "Nominal", Set Values({"KDBAC", "FLGHEK", "ONLCQR", "WVTZXR"})),
New Column("B", Character, "Nominal", Set Values({"ROMNLQ", "DFBACE", "LKGHJK", "WVTZYX"}))
);
// Create lookup associative array, with row number as key and value as associative array with
// keys as characters in row. This will be used in union operations
aa_lookup = Associative Array();
For Each({val, idx}, dt:B << get values,
aa_lookup[idx] = Associative Array(Eval List(Words(val, "")));
);
// Create collection column
dt << New Column("C", Numeric, Continuous);
For Each Row(dt,
best_match = 0;
max_row = .;
For Each({{key, val}}, aa_lookup,
cur_aa = Associative Array(Eval List(Words(:A, "")));
cur_aa << Intersect(val);
cur_match = N Items(cur_aa);
If(cur_match > best_match,
best_match = cur_match;
max_row = key;
);
);
:C = max_row;
);
