如何使用elixir ETS创建复杂查询 [英] How to create complex queries with elixir ets
本文介绍了如何使用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屋!
查看全文