Andres
Return true if a list has duplicates otherwise false
Hello.
I’m trying to check if a list has duplicates.
I didn’t have problems doing it with length and size:
def duplicate(list) do
a = length(list)
b = MapSet.size(MapSet.new(list))
a !== b
end
I also did it with Enum and pattern matching but I’m pretty sure there is a better way:
defmodule Checker do
def check(x) when is_boolean(x), do: x
def check(x), do: false
end
def main(list) do
list
|> Enum.reduce_while(%MapSet{}, fn x, acc ->
if x not in acc, do: {:cont, MapSet.put(acc, x)}, else: {:halt, true}
end)
|> Checker.check()
end
Could you help me to improve the last implementation in a more idiomatic way?
Thanks.
Marked As Solved
alexiss
Agree, I miss it. The final proposal whould be:
def has_duplicates?(list) do
list
|> Enum.reduce_while(%MapSet{}, fn x, acc ->
if MapSet.member?(acc, x), do: {:halt, false}, else: {:cont, MapSet.put(acc, x)}
end)
|> is_boolean()
end
7
Also Liked
peerreynders
Alternately shamelessly repurposing the implementation (uniq_list/3) of Enum.uniq/1:
defmodule Demo do
def duplicates?(list),
do: duplicates?(list, %{})
defp duplicates?([], _) do
false
end
defp duplicates?([head|tail], set) do
case set do
%{^head => true} ->
true
_ ->
duplicates?(tail, Map.put(set, head, true))
end
end
def run(list) do
list
|> duplicates?()
|> inspect()
|> IO.puts()
end
end
list = [1, 2, 3, 3, 2, 1]
uniq_list = Enum.uniq(list)
Demo.run(list) # true
Demo.run(uniq_list) # false
A lot can be learned by scouring through Elixir’s source code. The important thing is to understand how it works.
6
NobbZ
But reducing and finding the elements in a list again results in a runtime of O(n log n), using a MapSet is O(n).
3
l00ker
Maybe something like this:
def has_duplicates?(list), do: Enum.uniq(list) != list
2
alexiss
def has_duplicates?(list) do
list
|> Enum.reduce_while([], fn x, acc ->
if x in acc, do: {:halt, 0}, else: {:cont, [x | acc]}
end)
|> is_integer()
end
1
Popular in Questions
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service.
Currently when I de...
New
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
Hi,
I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
Sometimes I want to check if the input into a function is not a blank string.
My first approach:
defmodule Example do
def do_stuff(s...
New
Expanding on this topic: https://forum.elixirforum.net/t/map-typespec-question/19217
Let’s say I have a map with required and optional k...
New
I’ve been re-reading swift book again and noticed that multiline strings there don’t have a trailing line break, unlike in elixir
iex(2)...
New
Other popular topics
What is the proper way to load a module from a file in to IEX?
In the python world, doing something like this pretty standard:
from ....
New
Hello!
Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
I have a User schema with a :from_id field set to type :string:
defmodule TweetBot.Repo.Migrations.CreateUsers do
use Ecto.Migration
...
New
Hey,
Just curious what are the main benefits of Elixir compared to Clojure?
When is Elixir more useful than Clojure and vice versa?
Th...
New
Hi guys, i’m new in the Elixir world, and i have to say, that i love it!
i’m having some problem to understand anonymous functions with ...
New
Hi everyone,
One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
Hey :wave:t3: Elixir community,
I’ve been learning Elixir, and working on some side projects. My editor of choice is VSCode, and althoug...
New








