要素がタプルに含まれているかどうかを知るのに役立つ関数が Erlang にあるかどうかを知りたいです。セットのように:is_element/2.
Tuple = {aaa,bbb,ccc}.
is_element_of_tuple(Tuple, aaa) % => true
is_element_of_tuple(Tuple, ddd) % => false
要素がタプルに含まれているかどうかを知るのに役立つ関数が Erlang にあるかどうかを知りたいです。セットのように:is_element/2.
Tuple = {aaa,bbb,ccc}.
is_element_of_tuple(Tuple, aaa) % => true
is_element_of_tuple(Tuple, ddd) % => false
tuple_to_list/1を使用して、いつでもタプルをリストに変換できます。
is_element_of_tuple(Tuple, Element) ->
lists:member(Element, tuple_to_list(Tuple)).
簡単な答えは次のとおりです。いいえ、これを行う機能はありません。タプルが見つかるか見つからないまで、タプルのすべての要素をトラバースする独自のループを作成する必要があります。上記のようにタプルをリストに変換するか、次のような独自のループを記述します。
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
。