How to check if an element is in an array

后端 未结 17 965
囚心锁ツ
囚心锁ツ 2020-11-22 10:24

In Swift, how can I check if an element exists in an array? Xcode does not have any suggestions for contain, include, or has, and a qu

相关标签:
17条回答
  • 2020-11-22 10:57

    Use this extension:

    extension Array {
        func contains<T where T : Equatable>(obj: T) -> Bool {
            return self.filter({$0 as? T == obj}).count > 0
        }
    }
    

    Use as:

    array.contains(1)
    

    Updated for Swift 2/3

    Note that as of Swift 3 (or even 2), the extension is no longer necessary as the global contains function has been made into a pair of extension method on Array, which allow you to do either of:

    let a = [ 1, 2, 3, 4 ]
    
    a.contains(2)           // => true, only usable if Element : Equatable
    
    a.contains { $0 < 1 }   // => false
    
    0 讨论(0)
  • 2020-11-22 10:58

    Here is my little extension I just wrote to check if my delegate array contains a delegate object or not (Swift 2). :) It Also works with value types like a charm.

    extension Array
    {
        func containsObject(object: Any) -> Bool
        {
            if let anObject: AnyObject = object as? AnyObject
            {
                for obj in self
                {
                    if let anObj: AnyObject = obj as? AnyObject
                    {
                        if anObj === anObject { return true }
                    }
                }
            }
            return false
        }
    }
    

    If you have an idea how to optimize this code, than just let me know.

    0 讨论(0)
  • 2020-11-22 11:01

    Swift

    If you are not using object then you can user this code for contains.

    let elements = [ 10, 20, 30, 40, 50]
    
    if elements.contains(50) {
    
       print("true")
    
    }
    

    If you are using NSObject Class in swift. This variables is according to my requirement. you can modify for your requirement.

    var cliectScreenList = [ATModelLeadInfo]()
    var cliectScreenSelectedObject: ATModelLeadInfo!
    

    This is for a same data type.

    { $0.user_id == cliectScreenSelectedObject.user_id }
    

    If you want to AnyObject type.

    { "\($0.user_id)" == "\(cliectScreenSelectedObject.user_id)" }
    

    Full condition

    if cliectScreenSelected.contains( { $0.user_id == cliectScreenSelectedObject.user_id } ) == false {
    
        cliectScreenSelected.append(cliectScreenSelectedObject)
    
        print("Object Added")
    
    } else {
    
        print("Object already exists")
    
     }
    
    0 讨论(0)
  • 2020-11-22 11:02

    An array that contains a property that equals to

    yourArray.contains(where: {$0.propertyToCheck == value })
    

    Returns boolean.

    0 讨论(0)
  • 2020-11-22 11:03

    I used filter.

    let results = elements.filter { el in el == 5 }
    if results.count > 0 {
        // any matching items are in results
    } else {
        // not found
    }
    

    If you want, you can compress that to

    if elements.filter({ el in el == 5 }).count > 0 {
    }
    

    Hope that helps.


    Update for Swift 2

    Hurray for default implementations!

    if elements.contains(5) {
        // any matching items are in results
    } else {
        // not found
    }
    
    0 讨论(0)
  • 2020-11-22 11:06

    Just in case anybody is trying to find if an indexPath is among the selected ones (like in a UICollectionView or UITableView cellForItemAtIndexPath functions):

        var isSelectedItem = false
        if let selectedIndexPaths = collectionView.indexPathsForSelectedItems() as? [NSIndexPath]{
            if contains(selectedIndexPaths, indexPath) {
                isSelectedItem = true
            }
        }
    
    0 讨论(0)
提交回复
热议问题