Kdbplus-q-language-dictionaries

提供:Dev Guides
移動先:案内検索

Q言語-辞書

辞書は、テーブルを作成するための基盤を提供するリストの拡張です。 数学用語では、辞書は

「ドメイン→範囲」

または一般的に(短い)作成

「キー→値」

要素間の関係。

辞書は、ハッシュテーブルとほぼ同等のキーと値のペアの順序付きコレクションです。 ディクショナリは、位置対応を介したドメインリストと範囲リスト間の明示的なI/Oアソシエーションによって定義されるマッピングです。 辞書の作成には「xkey」プリミティブを使用します(!)

                  ListOfDomain ! ListOfRange

最も基本的な辞書は、単純なリストを単純なリストにマップします。

Input (I) Output (O)
`Name `John
`Age 36
`Sex “M”
Weight 60.3
q)d:`Name`Age`Sex`Weight!(`John;36;"M";60.3)  /Create a dictionary d

q)d

Name   | `John
Age    | 36
Sex    | "M"
Weight | 60.3

q)count d            /To get the number of rows in a dictionary.
4

q)key d              /The function key returns the domain
`Name`Age`Sex`Weight

q)value d            /The function value returns the range.

`John
36

"M"
60.3

q)cols d            /The function cols also returns the domain.
`Name`Age`Sex`Weight

見上げる

入力値に対応するディクショナリ出力値を見つけることは、入力を「調べる」と呼ばれます。

q)d[`Name]      /Accessing the value of domain `Name
`John

q)d[`Name`Sex]  /extended item-wise to a simple list of keys
`John
"M"

動詞での検索@

q)d1:`one`two`three!9 18 27

q)d1[`two]
18

q)d1@`two
18

辞書の操作

修正とアップサート

リストと同様に、ディクショナリのアイテムはインデックス付き割り当てを介して変更できます。

d:`Name`Age`Sex`Weight! (`John;36;"M";60.3)
                                 /A dictionary d

q)d[`Age]:35                     /Assigning new value to key Age

q)d
                             /New value assigned to key Age in d
Name   | `John
Age    | 35
Sex    | "M"
Weight | 60.3

辞書は、インデックスの割り当てによって拡張できます。

q)d[`Height]:"182 Ft"

q)d

Name   | `John
Age    | 35
Sex    | "M"
Weight | 60.3
Height | "182 Ft"

検索を使用した逆引き(?)

検索(?)演算子は、要素の範囲をそのドメイン要素にマッピングすることにより、逆ルックアップを実行するために使用されます。

q)d2:`x`y`z!99 88 77

q)d2?77
`z

リストの要素が一意でない場合、 find はドメインリストから最初の項目マッピングを返します。

エントリの削除

辞書からエントリを削除するには、* delete()関数*を使用します。 ()の左側のオペランドは辞書であり、右側のオペランドはキー値です。

q)d2:`x`y`z!99 88 77

q)d2 _`z

x| 99
y| 88

最初のオペランドが変数の場合、_の左側に空白が必要です。

q)`x`y _ d2          /Deleting multiple entries

z| 77

列辞書

列辞書は、テーブル作成の基本です。 次の例を考慮してください-

q)scores: `name`id!(`John`Jenny`Jonathan;9 18 27)
                             /Dictionary scores

q)scores[`name]              /The values for the name column are
`John`Jenny`Jonathan

q)scores.name                /Retrieving the values for a column in a
                             /column dictionary using dot notation.
`John`Jenny`Jonathan

q)scores[`name][1]           /Values in row 1 of the name column
`Jenny

q)scores[`id][2]             /Values in row 2 of the id column is
27

辞書の反転

列ディクショナリを反転することの最終的な効果は、単にインデックスの順序を逆にすることです。 これは、行と列の転置と論理的に同等です。

列辞書の反転

辞書の転置は、単項反転演算子を適用することにより取得されます。 次の例を見てください-

q)scores

name  | John Jenny Jonathan
id    | 9   18   27

q)flip scores

  name     id
---------------
  John     9
  Jenny    18
 Jonathan  27

反転した列辞書の反転

辞書を2回転置すると、元の辞書が取得され、

q)scores ~ flip flip scores
1b