在 Erlang 中检查列表中的项目

Posted

技术标签:

【中文标题】在 Erlang 中检查列表中的项目【英文标题】:check for item in list in 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

我该怎么做?

【问题讨论】:

【参考方案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() 在实际代码中调用的成本是多少,以及这段代码的目的是什么。跨度>

以上是关于在 Erlang 中检查列表中的项目的主要内容,如果未能解决你的问题,请参考以下文章

检查 unicode 值是不是在 Erlang 二进制字符串中?

erlang中的字符串值

Erlang VM (BEAM) 如何构建列表?

Erlang 问题

在 Erlang 中展平嵌套列表的列表

将记录作为键映射 - 如何检查Erlang中是否存在密钥