具有“issetequal”的数组数组的唯一元素

Mar*_*ulo 7 julia

对于像这样的数组

v=[[1,2],[1,2,3],[2,3,1]]
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来删除所有重复的条目,因为它们在被视为集合时是相等的。在这个例子中,issetequal([1,2,3],[2,3,1]) = true,所以该方法应该返回数组[[1,2],[1,2,3]]

原则上,类似的东西unique(issetequal, v)可以解决问题。但在实践中,这个选项给出了错误

错误:方法错误:没有方法匹配 issetequal(::Array{Int64,1})

有人有sugestion吗?

ffe*_*tte 8

文档中,我们看到这种形式的unique第一个参数是一元函数:

unique(f, itr)


  Returns an array containing one value from itr for each unique value produced by f applied to elements of itr.

  Examples
  ??????????

  julia> unique(x -> x^2, [1, -1, 3, -3, 4])
  3-element Array{Int64,1}:
   1
   3
   4
Run Code Online (Sandbox Code Playgroud)


在您的示例中,issetequal是一个二元函数,它直接检查两个值的集合相等性。相反Set,您想要的是构造函数,它SetArray. 然后,您可以让unique测试集合之间的相等性:

julia> unique(Set, [[1,2],[1,2,3],[2,3,1]])
2-element Array{Array{Int64,1},1}:
 [1, 2]   
 [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)