server_checaExistenciaBorrarAsistente(Asistente, L_Asistentes) ->
[MapAsistente || MapAsistente <- L_Asistentes,
maps:find("clave", MapAsistente) =/= {ok, Asistente}].
server_checaExistenciaBorrarAsistente(Asistente, L_Asistentes) ->
filter(L_Asistentes, fun(M) -> maps:find("clave", M) =/= {ok, Asistente} end).
filter(Maps, Filter) ->
[Map || Map <- Maps, Filter(Map)].
所以让我直说吧。你使用“for”esque 函数去
抛出列表并检查每张地图,然后开始比较。现在
我不明白的部分是你是如何让它被过滤的。
在python 中,列表推导更具可读性:
results = [Map for Map in Maps if “clave” in Map]
而且,如果你愿意,你可以将 if 条件提取到一个函数中:
def yes_or_no(Map):
if 'clave’ in Map:
return True
else:
return False
results = [Map for Map in Maps if yes_or_no(Map)]
请注意,yes_or_no() 接受一个参数并返回 True 或 False。
这是您想知道的两个erlang examples:
1)
server_checaExistenciaBorrarAsistente(Asistente, L_Asistentes) ->
[MapAsistente || MapAsistente <- L_Asistentes,
maps:find("clave", MapAsistente) =/= {ok, Asistente}].
如果您进行这些替换:
|| ... for
<- ... in
, ... if
然后你会得到一个 python 列表理解:
[MapAsistente for MapAsistente in L_Asistentes if
maps:find("clave", MapAsistente) =/= {ok, Asistente}].
所以你可以看到在 erlang 列表推导中,, 是一个 if-esque 结构。在这种情况下,maps:find() 返回 true/false,这决定了 Map 是否将包含在结果列表中,类似于 python 列表理解中的yes_or_no()。
2)
server_checaExistenciaBorrarAsistente(Asistente, L_Asistentes) ->
filter(L_Asistentes, fun(M) -> maps:find("clave", M) =/= {ok, Asistente} end).
filter(Maps, Filter) ->
[Map || Map <- Maps, Filter(Map)].
在这种情况下,不是使用列表推导来计算 server_checaExistenciaBorrarAsistente() 中的结果,而是将创建结果列表的所有工作都转移到一个辅助函数中,该函数可以命名为 get_results():
server_checaExistenciaBorrarAsistente(Asistente, L_Asistentes) ->
get_results(...).
get_results(Maps, Filter) ->
[Map || Map <- Maps, Filter(Map)].
在 python 中,列表解析如下所示:
[Map for Map in Maps if Filter(Map)]
辅助函数get_results() 需要两个参数来构造结果:
地图列表。
一个函数,它接受一个参数并返回 true 或 false 以指示 Map 是否应包含在结果列表中——就像 python yes_or_no() 函数一样。
在get_results() 中,您具有与第一种情况相同的列表理解结构:
[Map || Map <- Maps, Filter(Map)]
但这一次,真/假由传递给辅助函数并存储在过滤器变量中的函数确定。
如果有帮助,这里有一个非常简单的例子:
func() ->
my_helper(fun lists:reverse/1).
my_helper(SomeFunc) ->
SomeFunc([1 , 2, 3]).
例子:
9> c(my).
{ok,my}
10> my:func().
[3,2,1]