【问题标题】:Matching and deleting items in list of tuples匹配和删除元组列表中的项目
【发布时间】:2011-02-05 00:50:18
【问题描述】:

我有一个元组列表,比如说,

[{x, a, y}, {x, b, y}].

是否有内置函数(或者我可以使用 BIF 的组合)来删除所有匹配 {x, _, y} 的元组,如根据元组中的第一项和第三项进行匹配和删除,忽略第二项?

【问题讨论】:

    标签: list erlang pattern-matching tuples


    【解决方案1】:

    lists:filter/1 函数符合您的需要,例如

    Ls = [{x,a,y}, {a,b,c}],
    F = fun ({x,_,y}) -> false ; (_) -> true end,
    lists:filter(F, Ls).
    

    您还可以使用列表推导式,它类似于 lists:map/2 和 lists:filter/2 的组合。

    [L || L <- Ls, F(L)]
    

    如果你的谓词是相反的,因为你只想要那些匹配 {x,_,y} 你可以写如下,因为生成器会过滤掉那些不匹配模式的。

    [L || {x,_,y}=L <- Ls]
    

    【讨论】:

    • 我遵循了您在上面使用列表的方式:过滤器,但如果我想使用变量来执行此操作,则它不起作用。像这样: F = fun({,_Channel}) -> true; () -> false end, ClientsOnChannel = lists:filter(F(), NewServerState#server_st.client_channel), Channel 似乎是在 F 范围内定义的。如何让它过滤外部范围中定义的“频道”?
    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多