如何使用elixir ETS创建复杂查询 [英] How to create complex queries with elixir ets

查看:22
本文介绍了如何使用elixir ETS创建复杂查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用erlangsETS功能缓存了一堆邮政编码和经度值。

描绘以下内容.

iex()> :ets.new(:postcode_cache, [:named_table])
:postcode_cache
iex()> :ets.insert(:postcode_cache, [{"OX495NU", "latlongvalue"},{"M320JG", "latlongvalue"}])
true

这类似于我在应用程序中创建的ETS表。我想创建一个函数,它只从缓存中选择条目,其中邮政编码包含用户输入内容的子字符串。有什么方法可以做到这一点吗?如果有,我将如何实现此功能?

(将来我可能只想使用经度值选择一定距离内的值,但这超出了本问题的范围)。

为了清楚起见,该表类似于下面的长生不老药列表.

iex()> postcode_list = [{"OX495NU","latlong"}, {"M320JG", "latlong"}]

我希望使用ETS复制的功能如下所示.

iex()> Enum.filter(list, fn({postcode, _}) -> if String.contains?(postcode, "OX49") end)
[{"OX495NU", "latlong"}]

推荐答案

不能在匹配中调用任意函数,但是您手头有一个可以与:ets.foldl/3一起使用的匹配:

:ets.foldl(fn
  {<<"0X49", _ :: binary>>, "latlong"} = n, acc -> [n | acc]
  _, acc -> acc
end, [], :named_table)

这篇关于如何使用elixir ETS创建复杂查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆