什么是红宝石& Elixir的运营商?

时间:2015-10-25 15:40:23

标签: ruby elixir

喜欢这样:

list1 = [1,2,3,4,5]  
list2 = [2,3,6]  
list1 & list2 = [2,3]

我需要找到重复列表,即list1list2中的常见项。

2 个答案:

答案 0 :(得分:5)

您正在寻找的功能是Set.intersection/2

iex> Set.intersection(Enum.into([1, 2, 3 ,4 ,5], HashSet.new), Enum.into([2, 3, 6], HashSet.new))
[2, 3]

请注意,转换为集合意味着不允许重复:

Enum.into([1, 2, 3 ,2 ,5, 3], HashSet.new)
HashSet<[2, 3, 1, 5]>

另请注意,订单未得到维护:

iex>Enum.into([1, 2, 3 ,4 ,5, 6], HashSet.new) |> Set.to_list
[2, 6, 3, 4, 1, 5]

答案 1 :(得分:4)

不确定elixir是否为var2 = ((List<int>)array)[0]; 提供了类似的&运算符。

但是,您可以使用list运算符两次来实现您的结果:

--

您也可以在一行中完成:

iex> list1
# => [1, 2, 3, 4, 5]
iex> list2
# => [2, 3, 6]
iex> list3 = list1 -- list2
# => [1, 4, 5]   
iex> final_list = list1 -- list3
# => [2, 3] # this is your desired result