<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'essaie de voir s'il existe un moyen plus rapide de filtrer une liste basée sur des correspondances partielles.Voir le code ci-dessous. Soit dit en passant, c'est pour JMP 12, avant toutes les améliorations de la liste.
les noms par défaut sont ici ( 1 );
dt = Nouveau tableau ( "Test" ,
Nouvelle colonne ( "Une liste" , Définir les valeurs ( 1 :: 100000 )),
privé
);
liste = Colonne (dt, "Une liste" ) << Type de données (Personnage) << Obtenir des valeurs ;
fermer (dt, pas de sauvegarde);
filter_by_partial_match = Fonction ({liste, valeur},
dt = Nouveau tableau ( "Plus rapide?" ,
Nouvelle colonne ( "liste amusante" , Caractère, Définir les valeurs (liste)),
Nouvelle colonne ( "Boul" , Formule( Contient ( minuscule (:liste amusante), minuscule (valeur) )) ),
privé
);
booléens = lieu ( Colonne (dt, "Boul" )<< Obtenir des valeurs );
liste_filtrée = :funlist[bools];
fermer (dt, pas de sauvegarde);
liste_filtrée ;
);
heure_début = HPHeure ();
filtered_list = filter_by_partial_match(liste, "2" );
t_heure = HPHeure () - Heure de début;
montrer (t_time, nitems(filtered_list));
quelqu'un connaît un meilleur moyen ?
Je pense que la table de données bénéficie des avantages du multithreading (formules de col, etc.). Je serais donc surpris s'il existe un moyen plus rapide de le faire dans JMP 12.
Oui, il y aurait certainement des frais généraux liés à la mise en minuscules de la liste entière.Vous pouvez au moins mettre la valeur en minuscule.Mais encore une fois, le gain de performances n’est pas considérable.
Comment mettre toute la liste en minuscules ?Le coût de cette démarche ne dépasserait-il pas les avantages que vous en retireriez ?
Ouais, j'adore l'amélioration de la liste 13. Mais malheureusement, je dois en utiliser 12 pour le client.J'adore leur dire d'aller au 13 mais c'est probablement une tentative vaine.
L'avez-vous déjà essayé en version 13 ? Voici mes résultats en utilisant l'approche de table privée :
t_heure = 115828 ;
N éléments (liste_filtrée) = 40951 ;
Voici les résultats en utilisant une boucle :
t_heure = 61895 ;
N éléments (liste_filtrée) = 40951 ;
En revanche, voici ce que j'ai obtenu respectivement dans la version 12 :
t_heure = 127356 ;
N éléments (liste_filtrée) = 40951 ;
t_heure = 161896168 ;
N éléments (liste_filtrée) = 40951 ;
J'obtiens une légère amélioration si je supprime la fonction minuscule de la formule de colonne, et que j'envoie à la place une liste minuscule et que je définis la valeur en minuscule.Sinon, ça a l'air assez rapide.
C'est rapide! Les approches en boucle ou en regex ne s'en rapprocheraient même pas (j'ai essayé et échoué...).