1

要素がタプルに含まれているかどうかを知るのに役立つ関数が Erlang にあるかどうかを知りたいです。セットのように:is_element/2.

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

2 に答える 2

6

tuple_to_list/1を使用して、いつでもタプルをリストに変換できます。

is_element_of_tuple(Tuple, Element) ->
    lists:member(Element, tuple_to_list(Tuple)).
于 2012-09-04T04:24:02.520 に答える
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

このようにケースとマッチングを使用することは、完全に等しいかどうかをチェックすることを意味し、それが or=:=を返すtrueかどうかを使用してチェックするよりもおそらく少し高速ですfalse

于 2012-09-04T08:19:57.603 に答える