【问题标题】:Unique elements of an array of arrays with "issetequal"具有“issetequal”的数组数组的唯一元素
【发布时间】:2020-02-03 22:52:04
【问题描述】:

对于像

这样的数组
v=[[1,2],[1,2,3],[2,3,1]]

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

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

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

有人建议吗?

【问题讨论】:

    标签: julia


    【解决方案1】:

    documentation,我们看到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
    


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

    julia> unique(Set, [[1,2],[1,2,3],[2,3,1]])
    2-element Array{Array{Int64,1},1}:
     [1, 2]   
     [1, 2, 3]
    

    【讨论】:

    • 很好的回应!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2018-09-24
    • 2021-10-12
    相关资源
    最近更新 更多