<div dir="ltr"><div>Hi Fred,</div><div><br></div><div>Unfortunately just with pattern matching it is not possible to exactly match a map, but adding a map_size match condition in the match-spec could work:</div><div><br></div><div>7> ets:select(T, ets:fun2ms(fun({K, #{one := 11}} = O) when map_size(element(2, O)) =:= 1 -> K end)).<br>[gamma]</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Apr 13, 2020 at 2:34 PM Fred Youhanaie <<a href="mailto:fly@anydata.co.uk">fly@anydata.co.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi<br>
<br>
I couldn't find any details on map based match patterns!<br>
<br>
ETS allows maps as elements of the tuples.<br>
<br>
ets:match/2 allows map based match patterns, and returns a result if the pattern map is a subset of the a matched element.<br>
<br>
Is there a way of matching a tuple that is not a superset of the map pattern, i.e. only contains the keys in the map pattern?<br>
<br>
To clarify, in the following example I would like ets:match/2 to only return [[gamma]].<br>
<br>
Many thanks<br>
Fred<br>
<br>
1> T = ets:new(aaa, []).<br>
#Ref<0.3164011085.1783496708.202417><br>
<br>
2> ets:insert(T, {alpha, #{one=>1, two=>2}}).<br>
true<br>
<br>
3> ets:insert(T, {beta, #{one=>11, two=>12}}).<br>
true<br>
<br>
4> ets:insert(T, {gamma, #{one=>11}}).<br>
true<br>
<br>
5> ets:tab2list(T).<br>
[{gamma,#{one => 11}},<br>
  {alpha,#{one => 1,two => 2}},<br>
  {beta,#{one => 11,two => 12}}]<br>
<br>
6> ets:match(T, {'$1', #{one=>11}}).<br>
[[gamma],[beta]]<br>
</blockquote></div>