добавление значений разных типов в словарь - PullRequest
0 голосов
/ 16 января 2019

Это работает:

d1:`t1`t2`idx!(2017.01.01;2018.01.01;42)

Но этот сбой (ошибка типа):

d2:()!()
d2[`t1]:2017.01.01
d2[`t2]:2018.01.01
d2[`idx]:42

Есть ли обходной путь? Для лучшей читабельности я бы хотел заполнить словарь ключом (ключ за строкой). На самом деле это длиннее.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Первый подход определяет общий словарь, значения которого являются общим списком, что означает, что он может хранить значения любого типа. Это также используется при определении таблиц, поскольку таблицы могут хранить столбцы разных типов.

Во втором подходе, когда вы вставляете первое значение в словарь, он устанавливает тип списка значений словаря для этого типа элемента. Так что теперь это простой список.

  q) d2: ()!()
  q) d2[`t1]:2017.01.01
  q) type value d2  / 14h

Это означает, что теперь значения словаря не могут быть общим списком и могут хранить в нем только элементы типа даты.

Чтобы создать общий словарь (в котором хранится общий список в качестве значений), введите значение первой записи как ноль (: :). Это то, что используется словарями пространства имен.

  q)  d2: ()!()
  q)  d2[`]:(::) 

Теперь он может хранить любое значение.

  q) d2[`t2]:2018.01.01
  q) d2[`idx]:42
0 голосов
/ 16 января 2019

Когда вы определяете словарь как d:()!(), первое, что вы вставляете (в данном случае дату), заставит тип словаря принимать только значения типа -14h. Стандартная практика - инициализировать dict нетипизированным значением, чтобы значение не становилось простым вектором

d2:enlist[`]!enlist(::)
d2[`t1]:2017.01.01
d2[`t2]:2018.01.01
d2[`idx]:42
d2
   | ::
t1 | 2017.01.01
t2 | 2018.01.01
idx| 42
...