【问题标题】:Check if the struct is in array检查结构是否在数组中
【发布时间】:2014-12-20 11:29:13
【问题描述】:

我有以下结构:

struct MyStrict {
    let prop1: String
    let prop2: [String: NSData]
    let prop3: [String]

    init (prop11: String, prop22: [String : NSData], prop33: [String]) {
        prop1 = prop11
        prop2 = prop22
        prop3 = prop33
    }
}

实例结构放置在Array中。我需要做的是查找具有这些属性的结构是否在数组中。我需要比较数据。

类似这样的:

var arr = [MyStrict]()

var str1 = MyStrict(prop11: "test1", prop22: ["aa": NSData()], prop33: ["bb"])
arr.append(str1)

var str2 = MyStrict(prop11: "test2", prop22: ["bb": NSData()], prop33: ["cc"])
arr.append(str2)

var str3 = MyStrict(prop11: "test3", prop22: ["cc": NSData()], prop33: ["dd"])
arr.append(str3)

var str4 = MyStrict(prop11: "test1", prop22: ["aa": NSData()], prop33: ["bb"]) // has the same data as str1
arr.append(str4)

如您所见,str1str4 具有相同的数据。所以str4不应该添加到数组中。

我的问题是什么是正确的方法?

【问题讨论】:

    标签: ios arrays macos swift struct


    【解决方案1】:

    您需要将协议 Equatable 添加到您的结构中

    struct MyStrict: Equatable {
    ...
    }
    

    然后你必须像这样在类下添加 == 运算符:

    func == (lhs: MyStrict, rhs: MyStrict) -> Bool {
      if lhs.prop1 == rhs.prop1 && lhs.prop3 == rhs.prop3 && lhs.prop2 == rhs.prop2 {
        return true
    }
    
      return false
    }
    

    现在,要知道你的结构是否已经在数组中,你只需要使用这个:

    if contains(arr, str4) == true {
      println("already in")
    } else {
      println("Not in")
    }
    

    【讨论】:

    • 或者只是if contains(arr, str4) ...
    • 我编辑了答案。包含更适合问题需要。
    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多