2

我想在数组数组中搜索一个值,就像在这个例子中一样,但我不知道如何表示它“第一个元素在 $0 中的位置”?

var programArray: [Any] = []

let slots: String =  "2021-14-09 08:00:00|2021-14-09 09:00:00|ACCUEIL CAFE|Amphi A#2021-14-09 09:00:00|2021-14-09 10:00:00|PLENIERE|Amphi A#2021-14-09 10:00:00|2021-14-09 12:00:00|WORKSHOP|Salle Besse#2021-14-09 12:00:00|2021-14-09 14:00:00|DEJEUNER|Cantine#2021-14-09 14:00:00|2021-14-09 16:00:00|TESTDRIVES|XXX#2021-14-09 16:00:00|2021-14-09 17:00:00|CLOTURE|Amphi A#"

//Convert Slots in array
let stringArray = slots.components(separatedBy: "#")
if stringArray.count > 1 {
    for i in 0..<stringArray.count {
        let intermediateTwo = stringArray[i]
        let strinArrayTwo = intermediateTwo.components(separatedBy: "|")
        
        if strinArrayTwo.count > 1 {
            programArray.append(strinArrayTwo)
            
        } else {
            print("not found")
        }
    }
} else {
    print("not found")
}

//Remove other dates than today
let index = programArray.firstIndex(where: {$0 == "2021-14-09"}) //PROBLEM: Cannot convert value of type 'Any' to expected argument type 'String'
    //access index here
programArray.remove(at: index)

提前致谢

4

2 回答 2

3

⚠️ 不要contain()在连接的字符串上使用!

另一个答案和评论建议contain在连接部分使用。尽管在特定情况下它可能会返回正确的结果,但使用 contains 会导致模糊搜索,并可能导致不希望的行为,例如查找不相关的对象


✅ 走正确的路

首先,试着把事情弄清楚:

var matrix = slots.split(separator: "#").map { $0.split(separator: "|") }
dump(matrix)

这将为您提供数据矩阵:

▿ 6 elements
  ▿ 4 elements
    - "2021-14-09 08:00:00"
    - "2021-14-09 09:00:00"
    - "ACCUEIL CAFE"
    - "Amphi A"
  ▿ 4 elements
    - "2021-14-09 09:00:00"
    - "2021-14-09 10:00:00"
    - "PLENIERE"
    - "Amphi A"
  ▿ 4 elements
    - "2021-14-09 10:00:00"
    - "2021-14-09 12:00:00"
    - "WORKSHOP"
    - "Salle Besse"
  ▿ 4 elements
    - "2021-14-09 12:00:00"
    - "2021-14-09 14:00:00"
    - "DEJEUNER"
    - "Cantine"
  ▿ 4 elements
    - "2021-14-09 14:00:00"
    - "2021-14-09 16:00:00"
    - "TESTDRIVES"
    - "XXX"
  ▿ 4 elements
    - "2021-14-09 16:00:00"
    - "2021-14-09 17:00:00"
    - "CLOTURE"
    - "Amphi A"

然后搜索您需要的索引并将其删除,如下所示:

if let searchedIndex = matrix.firstIndex(where: { $0.first?.hasPrefix("2021-14-09") == true }) {
    matrix.remove(at: searchedIndex)
}

此外,您可以将它们加入到原始格式中,例如:

let updatedSlots = matrix.map { $0.joined(separator: "|") }.joined(separator: "#")
于 2021-08-26T20:26:49.000 回答
0
let index = programArray.firstIndex(where: { innerArray in
    innerArray.contains(where: { $0.hasPrefix("2021-14-09") })
})

这就是你要找的东西,ΩlostA?

于 2021-08-26T20:25:57.977 回答