Список внутри словаря
Sep. 9th, 2010 02:37 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
А вот как правильно сделать такую иммутабельную функциональную структуру данных:
есть словарь(map) из строк в качестве ключей и некоей структуры в качестве значений. Причем эта структура содержит внутри себя список. Для простоты можно считать что структура и есть просто список.
И задача - заполнить оный словарь имея список пар "строка-ключ, значение для списка". Ключи в списке пар повторяются. Короче, что-то вроде "select key,list(value) from KeyValuePairs group by key".
Наверно, можно предварительно отсортировать список по ключам, затем просто пройтись по списку, объединяя списки пар с одинаковыми ключами в пару "ключ, список значений" и полученное затем засунуть в словарь.
есть словарь(map) из строк в качестве ключей и некоей структуры в качестве значений. Причем эта структура содержит внутри себя список. Для простоты можно считать что структура и есть просто список.
И задача - заполнить оный словарь имея список пар "строка-ключ, значение для списка". Ключи в списке пар повторяются. Короче, что-то вроде "select key,list(value) from KeyValuePairs group by key".
Наверно, можно предварительно отсортировать список по ключам, затем просто пройтись по списку, объединяя списки пар с одинаковыми ключами в пару "ключ, список значений" и полученное затем засунуть в словарь.
no subject
Date: 2010-09-09 03:02 pm (UTC)no subject
Date: 2010-09-09 05:15 pm (UTC)no subject
Date: 2010-09-09 08:50 pm (UTC)no subject
Date: 2010-09-09 08:54 pm (UTC)no subject
Date: 2010-09-09 08:55 pm (UTC)no subject
Date: 2010-09-09 08:57 pm (UTC)no subject
Date: 2010-09-09 08:56 pm (UTC)no subject
Date: 2010-09-09 08:59 pm (UTC)no subject
Date: 2010-09-10 04:12 am (UTC)no subject
Date: 2010-09-09 06:12 pm (UTC)no subject
Date: 2010-09-09 06:21 pm (UTC)no subject
Date: 2010-09-09 07:01 pm (UTC)А вот как такое строить -- есть разные идеи. Если очень хочется эффективности, можно сделать слияние деревьев, где для слияния значений будет использоваться какая-нибудь из эффективных форм склеивания содержимого (для списков -- зависит от списков и семантики языка, для finger trees -- всё однозначно).
no subject
Date: 2010-09-09 08:53 pm (UTC)http://hackage.haskell.org/package/list-tries-0.2
>>И задача - заполнить оный словарь имея список пар "строка-ключ, значение для списка"
http://hackage.haskell.org/packages/archive/fingertree/0.0.1.0/doc/html/Data-FingerTree.html В вариации секуэнса (см статью из заголовка)