UN domanda sull'utilizzo di insiemi di nomi di colonne. È possibile utilizzare gli array associativi di JSL per eseguire operazioni sugli insiemi. I metodi <
// make three sets
rgb = associativearray({"red","green","blue"});
cmy = associativearray({"cyan","magenta","yellow"});
bw = associativearray({"black","white"});
// join them together
all = rgb;
all<<INSERT></INSERT>
La domanda è stata posta in termini di set di nomi di colonne e questo esempio utilizza l'operazione set di array associativi < per ottenere la differenza tra l'insieme di tutte le colonne e l'insieme di colonne contenenti la lettera "i".
// keep only the columns with an "i" in the name
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
allnames = dt << getcolumnnames( "string" );
inames = {};
For( i = 1, i <= N Items( allnames ), i++,
If( Contains( allnames[i], "i" ),
Insert Into( inames, allnames[i] )
)
);
allset = Associative Array( allnames ); // {"name", "age", "sex", "height", "weight"}
iset = Associative Array( inames ); // {"height", "weight"}
allset << Remove( iset ); // the "not i" set...
notinames = allset<<GETKEYS></GETKEYS>
Questo è molto carino.Non avevo pensato di usare array associativi come questo.In passato ho avuto situazioni in cui ho utilizzato un elenco di riferimenti a oggetti e volevo cercare nell'elenco per eliminare gli oggetti che soddisfacevano determinate condizioni.L'uso delle operazioni di elenco era piuttosto lento e la logica di controllo era complicata.Posso vedere come questo lo renderebbe molto più facile.Sto copiando e incollando il tuo codice di esempio da aggiungere alla mia "raccolta JSL" per riferimento futuro!