【问题标题】:check for item in list in Erlang在 Erlang 中检查列表中的项目
【发布时间】:2015-12-08 09:50:29
【问题描述】:

我正在尝试在 Erlang 中创建检查功能 我有一个单词和单词列表

list_word() ->
     ["bad1", "bad2", "bad3"].

我正在尝试检查列表中的这个单词是否返回 true 除了返回 false

示例:

check_list() ->
    badword = list_word(),
    if "bad1" == badword ->
        %% do some thing

在这种情况下,列表中的第一个单词,但第二个单词不是,我不希望它返回 true

check_list() ->
    badword = list_word(),
    if "bad1 test" == badword ->
        %% do some thing

我该怎么做?

【问题讨论】:

    标签: erlang erl


    【解决方案1】:

    看看lists:member/2——它被实现为BIF,所以它非常快。

    case lists:member("bad1", list_word()) of
        true ->
            %% do something
            ;
        false ->
            ok
    end.
    

    编辑: 对于您的第二个示例,您可以执行以下操作:

    Words = list_word(),
    Found = fun(Word) -> lists:member(Word, Words) end,
    BadWords = string:tokens("bad1 test", " "),
    case lists:any(Found, BadWords) of
        true ->
            %% do something
            ;
        false ->
            ok
    end.
    

    【讨论】:

    • @emzemzx:我建议你从erlang.org/doc/getting_started/seq_prog.html开始
    • 谢谢,如果我添加这样的大词怎么办。 lists:member("bad1 test", list_word()) 列表中的第一个单词但第二个单词不是,我不希望它返回 true,可以吗?
    • 那么你必须更具体。你可以做类似lists:any(fun(X) -> lists:member(X, list_word()) end, string:tokens("bad1 test", " ")) 这样的事情,但是会出现很多问题,比如为什么你有"bad1 test" 而不是["bad1", "test"]list_word() 在实际代码中调用的成本是多少,以及这段代码的目的是什么。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多