检查3D数组Swift中是否存在元素

时间:2017-08-20 08:42:30

标签: ios arrays swift

我有一个数组,可以在viewDidLoad var bookingsArray : [[String]] = []中实例化var configuration: [String] = [] configuration.append(textfieldFacility.text!) configuration.append((pickSlotTF.text?.components(separatedBy: " ")[0])!) configuration.append((pickSlotTF.text?.components(separatedBy: " ")[1])!) bookingsArray.append(configuration as [String])

我正在以这种方式添加元素:

bookingsArray

[["A", "20-08-2017", "14:00"], ["B", "20-08-2017", "14:00"]] 看起来像:

bookingsArray

在向boot.ts添加新元素时,我想检查新元素是否已存在于数组中。在这种多维数组的情况下我该怎么做?

2 个答案:

答案 0 :(得分:2)

首先,如果您想要唯一对象,请使用Set

如果无法做到这一点,我强烈建议使用符合Equatable而不是嵌套数组的自定义结构,例如

struct Booking : Equatable {
    let facilty : String
    let date : String
    let time : String

    static func ==(lhs : Booking, rhs : Booking) -> Bool {
        return lhs.facilty == rhs.facilty && lhs.date == rhs.date && lhs.time == rhs.time
    }
}

然后将数组声明为

var bookingsArray = [Booking]()

并使用

创建一个对象
let dateArray = pickSlotTF.text!.components(separatedBy: " ")
let configuration = Booking(facility: textfieldFacility.text!,
                            date: dateArray[0],
                            time = dateArray[1])
bookingsArray.append(configuration)

巨大的好处是你可以轻松检查

if bookingsArray.contains(item)

答案 1 :(得分:1)

您只需使用contains()搜索它即可。

var configuration: [String] = []
configuration.append(textfieldFacility.text!)
configuration.append((pickSlotTF.text?.components(separatedBy: " ")[0])!)
configuration.append((pickSlotTF.text?.components(separatedBy: " ")[1])!)

if !bookingsArray.contains(where: {$0 == configuration}) {
    bookingsArray.append(configuration)
}