LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Organization

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

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

つまり

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

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

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

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

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

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

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
What you can do with signing up
0