Re: Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)tratar el valor ejemplo["b"] como cualquier otra lista.
Names Default To Here( 1 );
ex = Associative Array();
ex["a"] = {"10"};
ex["b"] = {"20"};
ex["c"] = {"30"};
// Add new value to "b"
Insert Into( ex["b"], {"21"} );
Show( ex );Re: Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)La respuesta de Mark es la mejor. También puedes hacerlo así
ex["c"][nitems(ex["c"])+1]="99";
que es más feo, más lento y menos conciso. Pero podría sugerir otras posibilidades. Las listas tienen una propiedad de subíndice genial para uno más allá del final que permite extender la lista en un elemento.
Re: Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)De hecho, estoy usando algo más como esto, así que supongo que me falta una evaluación de la variable:
Names Default To Here( 1 );
ex = Associative Array();
a_s = "a";
b_s = "b";
c_s = "c";
a_n = "10";
b_n = "20";
c_n = "30";
ex[a_s] = {a_n};
ex[b_s] = {b_n};
ex[c_s] = {c_n};
// Add new value to "b"
b_n = "21";
Insert Into( ex[b_s], {b_n} );
Show( ex );
// ex = ["a" => {a_n}, "b" => {b_n, b_n}, "c" => {c_n}];
Re: Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)La definición de lista dice que no se evalúan.
Lista: crea una lista de elementos sin evaluarlos.
Simplemente envuélvalos en evallist()
Names Default To Here( 1 );
ex = Associative Array();
a_s = "a";
b_s = "b";
c_s = "c";
a_n = "10";
b_n = "20";
c_n = "30";
ex[a_s] = Evallist({a_n});
ex[b_s] = Evallist({b_n});
ex[c_s] = Evallist({c_n});
// Add new value to "b"
b_n = "21";
Insert Into( ex[b_s], Evallist({b_n}) );<BR />// or you could this it seems easier.
// Insert Into( ex[b_s], b_n) ;<BR />
Show( ex );Re: Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)Esto funciona, pero si una clave dada no existe, entonces no puedo insertar nuevos elementos en ella.
Independientemente de si la clave ya está allí o no, ¿existe una forma sencilla de introducir una nueva clave-->valor o insertar un nuevo valor?
Re: Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)Creo que necesitará usar una declaración if para verificar si existe la clave y crearla si no es así. Usualmente hago esto creándolo con una lista vacía, luego caigo en el código que agrega el nuevo elemento a la lista existente.Re: Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)Ejemplo completo, incluido el obvio forma en que lo hace no funcione correctamente.
// I wish the default value for AA's worked correctly with a list for the
// default, but it does not:
aa = [=> {}];
Insert Into( aa["fred"], 1 );
Insert Into( aa["ralph"], 2 );
Show( aa ); // aa = [=> {1, 2}]; ?!?!?!?!
// so you must do an explicit test and create the key/list like this:
aa = [=> ];
For( i = 1, i <= 3, i += 1,
For Each( {key}, {"fred", "ralph"},
If( !(aa << Contains( key )), // key does not exist?
aa[key] = {};// add the key with an empty list
);
Insert Into( aa[key], i );// insert into list
)
);
Show( aa ); // aa = ["fred" => {1, 2, 3}, "ralph" => {1, 2, 3}];
Insertar valores adicionales a claves existentes en matrices asociativas (diccionarios de datos en JSL)No puedo encontrar el método adecuado para agregar nuevos valores a las claves existentes en matrices asociativas.
Names Default To Here( 1 );
ex = Associative Array();
ex["a"] = {"10"};
ex["b"] = {"20"};
ex["c"] = {"30"};
<BR />// Add new value to "b"
ex["b"] = {"21"};
show(ex);
//ex = ["a" => {"10"}, "b" => {"21"}, "c" => {"30"}];
// Solution needed
//ex = ["a" => {"10"}, "b" => {"20", "21"}, "c" => {"30"}];Modelado Estadístico AvanzadoFusión y limpieza de datos