ここにいくつかの問題があります。即ち
q)book[`orderType1][`ask][`GOOG]
orderID| date time sym side orderType price quantity
-------| -------------------------------------------
あなたはインライン繰り返す一連のキーを使用して辞書にルックアップすることができながら、ということで最初のものは、(だけ深い1つのレベルで割り当てることができ)、このような値を割り当てることができません。より良いアプローチは、ドットインデクシング(およびドット補正)を使用して値を再割り当てすることです。しかし、問題は、辞書のリストが統一されているため、ブック辞書の値がテーブルに平らになっていることです。だから、これは失敗します。
q)book . `orderType1`ask`GOOG
'rank
あなたはそれはあなたが一般的なヌル
を追加することにより、混合リストされる値を強制することができ平坦化これを防ぐには、端末
q)book
| ask
----------| -----------------------------------------------------------------
orderType1| (,`)!,(+(,`orderID)!,`int$())!+`date`time`sym`side`orderType`pric
orderType2| (,`)!,(+(,`orderID)!,`int$())!+`date`time`sym`side`orderType`pric
orderType3| (,`)!,(+(,`orderID)!,`int$())!+`date`time`sym`side`orderType`pric
を検査することにより、平坦化してしまったかを確認することができます
q)book: ``orderType1`orderType2`orderType3 !(::),(3# enlist(`ask`bid!(2# enlist bookDict)));
は、その後、それは次のようになります。
q)book
| ::
orderType1| `ask`bid!+(,`)!,((+(,`orderID)!,`int$())!+`date`time`sym`side`ord
orderType2| `ask`bid!+(,`)!,((+(,`orderID)!,`int$())!+`date`time`sym`side`ord
orderType3| `ask`bid!+(,`)!,((+(,`orderID)!,`int$())!+`date`time`sym`side`ord
ドットインデックスが機能するようになりました:
q)book . `orderType1`ask`GOOG
orderID| date time sym side orderType price quantity
-------| -------------------------------------------
ドットは、修正することを意味している今、最後に、私はどのように最高の店帳データの上でこのFDのホワイトペーパーを読むことをお勧めし
すぎ
q).[`book;`orderType1`ask`GOOG;,;testorder]
`book
q)book
| ::
orderType1| `ask`bid!+``GOOG!(((+(,`orderID)!,`int$())!+`date`time`sym`side`o
orderType2| `ask`bid!+(,`)!,((+(,`orderID)!,`int$())!+`date`time`sym`side`ord
orderType3| `ask`bid!+(,`)!,((+(,`orderID)!,`int$())!+`date`time`sym`side`ord
に動作します:
http://www.firstderivatives.com/downloads/q_for_Gods_Nov_2012.pdf
多くのありがとうございます。キー付きのテーブルでappend(カンマ)を使用しない理由を説明してください。 ** [\\ book; \ 'orderType1 \' ask \ 'GOOG;、; testorder] **は正常に動作しているようです(注文IDがテーブルにない場合は新しいエントリを追加し、それ以外の場合は既存のエントリを更新します)。また、はるかに高速です(〜100sオーダーをアップするには〜36秒、100000オーダーを追加するには〜7秒)。リンクしているFDの論文でもそうしています(たとえば、基盤となるテーブルが価格で設定されているupdBySymSide2)。 – dhk
あなたは正しく、私の悪いです。私はそれが私のテストで失敗したと思った。私は私の答えを編集します – terrylynch