erlang中元组中的元素与否?

时间:2012-09-04 04:01:43

标签: erlang

我想知道Erlang中是否有函数可以帮助我知道元素是否在元组中。喜欢集合:is_element / 2。

Tuple = {aaa,bbb,ccc}.
is_element_of_tuple(Tuple, aaa)  % => true
is_element_of_tuple(Tuple, ddd)  % => false

2 个答案:

答案 0 :(得分:6)

您始终可以使用tuple_to_list/1将元组转换为列表:

is_element_of_tuple(Tuple, Element) ->
    lists:member(Element, tuple_to_list(Tuple)).

答案 1 :(得分:4)

简单的答案是:没有没有执行此操作的功能。你必须编写自己的循环遍历元组的所有元素,直到它找到或找不到它为止。您可以将元组转换为上面的列表,也可以编写自己的循环,例如:

is_element_of_tuple(E, Tuple) ->
    is_element_of_tuple(E, Tuple, 1, tuple_size(Tuple)).

is_element_of_tuple(E, T, I, S) when I =< S ->
    case element(I, T) of
        E -> true;
        _ -> is_element_of_tuple(E, T, I+1, S)
    end;
is_element_of_tuple(_, _, _, _) -> false.                 %Done all the elements

以这种方式使用案例和匹配意味着我们检查确切的相等性,它可能比使用=:=并检查是否返回truefalse要快一点。 / p>