Indicizzazione della matrice Fox, si può usare 0 e ottenere una fetta completa:
m = [ 1 2 , 3 4];
m[0,1]; // [1, 3]
Per le tabelle dati funziona anche questo:
test = new table("test", <BR />add rows(10), <BR />new column("col1",Character, set each value({"A","B","C"}[random integer(3)])),<BR />new column("col2", set each value(random uniform(5))));
test[4,0]
Per le liste di liste questo non è possibile:
list= {{"A", 3},{"B", 5}};
list[0,1]Sure, there are many lists of lists where such slicing is not possible, like {{"A", 3},{"B"}}.
D'altro canto, ci SONO molte liste di elenchi che lo consentirebbero.
Dove le cose diventano davvero interessanti: array associativi di array associativi .
Come per le liste, il concetto di Associative Array è più flessibile di quello che possiamo fare con una matrice o una tabella dati, quindi lo slicing non funzionerà per loro. Ma come per le liste, CI SONO Associative Array in cui lo slicing funzionerà...
Esiste una funzione in JSL, qualcosa come myAssociativeArray[0, "peso"] , che svolge questo compito?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
dt << Save( "$DOWNLOADS/test.json" );
// for sake of simplicity we accept to lose 1x ROBERT
myIndex=dt[0,"name"]
myAssociativeArray = Associative Array(myIndex,ParseJSON(Load text file ( "$DOWNLOADS/test.json")));
<BR />// cool, but not what we want
mapToWeight = Transform Each({{key, value}}, aa, value["weight"]);
SliceAssociativeArray= Function({aa, indexname},
Transform Each({value}, aa << get values, value[indexname])
);
SliceAssociativeArray(myAssociativeArray ,"weight") //myAssociativeArray [0, "weight"]
Strutture dati diverse hanno usi diversi, per array associativo (penso) significa memorizzare chiavi univoche e ottenere rapidamente i valori per quelle chiavi (memorizza coppie chiave-valore). Transform Each è una buona opzione da usare, cambia semplicemente l'output
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);
Un altro trucco fantastico - molto utile:)
Dall'usabilità, penso
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);E
Transform Each({value}, aa << get values, value["weight"])dal post originale hanno un valore comparabile
... abbastanza lontano da aa[0, "peso"]
Immagina di voler ottenere tutti gli aa[0,"2024",0,0,"data"].
Non sono sicuro di cosa dovrebbe "interrogare" aa[0,"2024",0,0,"data"]. Se desideri ottenere solo indici "0", potresti memorizzare i tuoi valori in un array associativo in modo tale che le tue chiavi siano nomi di colonna e i valori siano elenchi di valori di riga.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
aa = Associative Array();
For Each({colname}, dt << Get Column Names("String"),
aa[colname] = As List(Column(dt, colname) << get values);
);
In genere, se voglio memorizzare i miei dati in un formato simile a una tabella, a cui sia possibile accedere come una tabella, utilizzerei semplicemente una tabella dati JMP (privata).