Erlang lists:index_of function?

Justin picture Justin · Sep 22, 2009 · Viewed 15.2k times · Source

I'm looking for an Erlang library function that will return the index of a particular element in a list.

So, if

X = [10,30,50,70]
lists:index_of(30, X)

would return 1, etc., just like java.util.List's indexOf() method.

Does such a method exist in the Erlang standard lib? I tried looking in the lists module but no luck. Or should I write it myself?

Answer

sepp2k picture sepp2k · Sep 22, 2009

You'll have to define it yourself, like this:

index_of(Item, List) -> index_of(Item, List, 1).

index_of(_, [], _)  -> not_found;
index_of(Item, [Item|_], Index) -> Index;
index_of(Item, [_|Tl], Index) -> index_of(Item, Tl, Index+1).

Note however that accesing the Nth element of a list is O(N), so an algorithm that often accesses a list by index will be less efficient than one that iterates through it sequentially.