如何创建集合扩展以在具有属性的集合中查找唯一对象?

Posted

技术标签:

【中文标题】如何创建集合扩展以在具有属性的集合中查找唯一对象?【英文标题】:How to create Set Extension to find unique object in the set with property? 【发布时间】:2016-02-13 20:32:06 【问题描述】:

查看了几个解决方案来查找 Array 中与结构中的字段匹配的第一个元素,这里: Find object with property in array 和这里:find object in array

仅在单个唯一匹配时才返回匹配:

    var foundAction: SequenceAction?
    let filteredActions = currentStatus.seqActionsList.filter($0.verb == actionCommand)
    if filteredActions.count == 1
    
        foundAction = filteredActions.first
    

继续使用这个 sn-p 但不知道如何添加为 Set 的扩展?

【问题讨论】:

【参考方案1】:

Set 已经有一个indexOf 方法,可让您使用谓词搜索成员。你可以使用它:

let numberSet: Set = [2, 4, 6, 8, 10, 12, 13]
if let index = numberSet.indexOf( $0 % 2 == 1 ) 
    print(numberSet[index])
 else 
    print("No odd members found")

【讨论】:

谢谢,最后我扩展了Set【参考方案2】:

为了记录,最终想通了:

extension Set
func findUniqueMatch(predicate: Element -> Bool) -> Element?

    let filteredList = self.filter(predicate)
    if filteredList.count == 1
    
        return filteredList.first
    

    return nil

【讨论】:

以上是关于如何创建集合扩展以在具有属性的集合中查找唯一对象?的主要内容,如果未能解决你的问题,请参考以下文章

查找集合中具有给定属性的所有对象[重复]

Java List集合

Java List集合

Java集合框架

在集合之间查找唯一对象

Java中的集合框架