Assoziative Arrays aufteilen?Bei der Fox-Matrixindizierung kann man 0 verwenden und erhält einen vollständigen Ausschnitt:
m = [ 1 2 , 3 4];
m[0,1]; // [1, 3]
Für Datentabellen funktioniert dies auch:
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]
Bei Listen von Listen ist dies nicht möglich:
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"}}.
Andererseits gibt es viele Listen, die dies ermöglichen würden.
Wo es wirklich interessant wird: Assoziative Arrays von assoziativen Arrays .
Wie bei Listen ist das Konzept von assoziativen Arrays flexibler als das, was wir mit einer Matrix oder einer Datentabelle machen können – daher funktioniert das Slicen bei ihnen nicht. Aber wie bei Listen gibt es assoziative Arrays, bei denen das Slicen funktioniert ...
Gibt es eine Funktion in JSL, etwa meinAssociativeArray[0, "Gewicht"] , die diese Aufgabe erledigt?
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"]
Automatisierung und SkriptingBetreff: Assoziative Arrays aufteilen?Verschiedene Datenstrukturen haben unterschiedliche Verwendungszwecke. Für assoziative Arrays (glaube ich) bedeutet dies, eindeutige Schlüssel zu speichern und die Werte für diese Schlüssel schnell abzurufen (es speichert Schlüssel-Wert-Paare). Transform Each ist eine gute Option, ändern Sie einfach die Ausgabe
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);
Betreff: Assoziative Arrays aufteilen?Ein weiterer cooler Trick - sehr nützlich:)
Von der Benutzerfreundlichkeit her, denke ich,
weights = Transform Each({{key, value}}, aa, Output("List"),
value["weight"]
);Und
Transform Each({value}, aa << get values, value["weight"])aus dem ursprünglichen Beitrag sind auf einem vergleichbaren Wert
... ziemlich weit von aa[0, "Gewicht"]
Stellen Sie sich vor, Sie möchten alle aa[0,"2024",0,0,"date"] abrufen.
Betreff: Assoziative Arrays aufteilen?Ich bin nicht sicher, was dies „abfragen“ soll : aa[0,"2024",0,0,"date"]. Wenn Sie nur „0“-Indizes erhalten möchten, können Sie Ihre Werte so in einem assoziativen Array speichern, dass Ihre Schlüssel Spaltennamen und Ihre Werte Listen der Zeilenwerte sind.
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);
);
Wenn ich meine Daten in einem tabellenähnlichen Format speichern möchte, auf das wie auf eine Tabelle zugegriffen werden kann, verwende ich im Allgemeinen einfach die (private) JMP-Datentabelle.
Betreff: Assoziative Arrays aufteilen?guter Punkt : ):)