Indexación de matriz Fox, se puede utilizar 0 y obtener una porción completa:
m = [ 1 2 , 3 4];
m[0,1]; // [1, 3]
Para las tablas de datos esto también funciona:
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]
Para listas de listas, esto no es posible:
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"}}.
Por otro lado, HAY muchas listas de listas que lo permitirían.
Donde la cosa se pone realmente interesante: Matrices asociativas de matrices asociativas .
Al igual que con las listas, el concepto de matrices asociativas es más flexible que lo que podemos hacer con una matriz o una tabla de datos, por lo que la segmentación no funcionará en ellas. Pero, al igual que con las listas, HAY matrices asociativas en las que la segmentación sí funcionará...
¿Existe una función en JSL, algo como myAssociativeArray[0, "peso"] , que haga este trabajo?
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"]
Las diferentes estructuras de datos tienen diferentes usos. En el caso de las matrices asociativas (creo), significa almacenar claves únicas y obtener los valores de esas claves rápidamente (almacena pares clave-valor). Transform Each es una buena opción para usar, solo cambia la salida.
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);
Otro truco genial, muy útil:)
Desde la usabilidad, creo que
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);y
Transform Each({value}, aa << get values, value["weight"])del post original tienen un valor comparable
... bastante lejos de aa[0, "peso"]
Imagínate que quieres obtener todos los aa[0,"2024",0,0,"fecha"].
No estoy seguro de qué debería "consultar" esto aa[0,"2024",0,0,"fecha"]. Si solo desea obtener índices "0", puede almacenar sus valores en una matriz asociativa de tal manera que sus claves sean nombres de columnas y los valores sean listas de valores de fila.
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);
);
Generalmente, si quiero almacenar mis datos en un formato similar a una tabla a la que se pueda acceder como una tabla, simplemente usaría la tabla de datos JMP (privada).