2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ClojureAdvent Calendar 2020

Day 4

ネストしたデータ構造をフラットなマップに変換する

Last updated at Posted at 2020-12-07

別途穴埋め記事を書こうと思いますが、cruxというClojureネイティブなdatalogデータベースシステムがあります。
この記事に関連ある点だけで言うと任意のClojureマップをシリアライズして保存して後からクエリできるのですが、
ネストされたフィールドはインデックスされないためクエリの対象にできない、という特徴があります。

つまり

{:foo "bar"
 :bar {:baz "quz"}}

という者が保存されていた場合、:foo"bar"の値の物を返してくださいというクエリはできますが、:barのように値がプリミティブな値でない場合にはそれに基いたクエリができないというわけです。

ただ、何かしらの手段でネストしたフィールドをこのようにトップレベルに持ってきたマップに変換できれば:bar.bazが "quz"のもの、という風に書けてこの弱点を克服できそうです。

{:foo "bar"
 :bar.baz "quz"}

動機はcruxの特性でしたが、只のアルゴリズムでcrux以外の文脈でも使えるかも、というわけでこれをするライブラリを作って公開しました。

実装のつっこみやスターなどお待ちしております。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?