Q Sprache - Typ Casting

Es ist häufig erforderlich, den Datentyp einiger Daten von einem Typ in einen anderen zu ändern. Die Standard-Casting-Funktion ist das "$"dyadic operator.

Drei Ansätze werden verwendet, um von einem Typ in einen anderen umzuwandeln (außer für Zeichenfolgen) -

  • Geben Sie den gewünschten Datentyp anhand des Symbolnamens an
  • Geben Sie den gewünschten Datentyp anhand seines Zeichens an
  • Geben Sie den gewünschten Datentyp anhand des Kurzwerts an.

Ganzzahlen in Floats umwandeln

Im folgenden Beispiel für das Umwandeln von Ganzzahlen in Floats sind alle drei verschiedenen Arten des Umwerfens gleichwertig:

q)a:9 18 27

q)$[`float;a]     / Specify desired data type by its symbol name, 1st way
9 18 27f

q)$["f";a]        / Specify desired data type by its character, 2nd way
9 18 27f

q)$[9h;a]         / Specify desired data type by its short value, 3rd way
9 18 27f

Überprüfen Sie, ob alle drei Operationen gleich sind.

q)($[`float;a]~$["f";a]) and ($[`float;a] ~ $[9h;a])
1b

Zeichenfolgen in Symbole umwandeln

Das Umwandeln von Zeichenfolgen in Symbole und umgekehrt funktioniert etwas anders. Lassen Sie es uns anhand eines Beispiels überprüfen -

q)b: ("Hello";"World";"HelloWorld")    / define a list of strings

q)b
"Hello"
"World"
"HelloWorld"

q)c: `$b                               / this is how to cast strings to symbols

q)c                                    / Now c is a list of symbols
`Hello`World`HelloWorld

Der Versuch, Zeichenfolgen mit den Schlüsselwörtern `symbol oder 11h in Symbole umzuwandeln, schlägt mit dem Typfehler fehl -

q)b
"Hello"
"World"
"HelloWorld"

q)`symbol$b
'type

q)11h$b
'type

Strings in Nicht-Symbole umwandeln

Das Umwandeln von Zeichenfolgen in einen anderen Datentyp als das Symbol erfolgt wie folgt:

q)b:900               / b contain single atomic integer

q)c:string b          / convert this integer atom to string “900”

q)c
"900"

q)`int $ c            / converting string to integer will return the
                      / ASCII equivalent of the character “9”, “0” and
                      / “0” to produce the list of integer 57, 48 and
                      / 48.
57 48 48i

q)6h $ c              / Same as above
57 48 48i

q)"i" $ c             / Same a above
57 48 48i

q)"I" $ c
900i

Um also eine ganze Zeichenfolge (die Liste der Zeichen) in ein einzelnes Atom des Datentyps umzuwandeln x erfordert, dass wir den Großbuchstaben angeben, der den Datentyp darstellt x als erstes Argument an die $Operator. Wenn Sie den Datentyp von angebenx Auf andere Weise wird die Besetzung auf jedes Zeichen der Zeichenfolge angewendet.