对于像这样的数组
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吗?
从文档中,我们看到这种形式的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,您想要的是构造函数,它Set从Array. 然后,您可以让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)