小编典典

循环检查多个数组中的匹配项

all

我有 7 个字符串数组。

var redArray : [String] = ["2022-07-13", "2022-07-14","2022-07-15"]
var blueArray : [String] = ["2022-07-13", "2022-07-14","2022-07-16"]
...
And five more of the same format

我正在尝试创建一种方法,它将通过七个数组并像下面的一样工作(下面的示例适用于两个数组):

       if redArray.contains(someDate) && blueArray.contains(someDate)
        {
            return [UIColor.red, UIColor.blue]
        }
        else

        if redArray.contains(someDate)
        {
            return [UIColor.red]
        }
        else if blueArray.contains(someDate)
        {
            return [UIColor.blue]
        }

        return [UIColor.clear]

所以它应该在数组中找到日期的匹配项,并返回具有此匹配项的数组的颜色名称。如果没有匹配 - 应返回单一颜色。对于两个数组很容易做到这一点。但我不明白如何循环其中的 7 个 :(

当然,也可以手动完成。但我想一定有一种聪明的方法来实现循环——尽管我不够聪明,无法弄清楚如何实现。

PS我不知道是否重要,但是将使用此方法的功能如下:

func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance,eventDefaultColorsFor date: Date) -> [UIColor]?
    {
       ...
    }

阅读 64

收藏
2022-07-17

共1个答案

小编典典

你可以简单地这样做:

var colors: [UIColor] = []

if redArray.contains(someData) {
    colors.append(.red)
}
if blueArray.contains(someData) {
    colors.append(.blue)
}
if greenArray.contains(someData) {
    colors.append(.green)
}

return colors.isEmpty ? [.clear] : colors

如果你真的想要循环,从:

let tuples: [(UIColor, [String])] = [(.red, redArray), (.blue, blueArray), (.green, greenArray)]
var colors: [UIColor] = []

基本for循环:

for aTuple in tuples {
    if aTuple.1.contains(someData) {
        colors.append(aTuple.0)
    }
}

基本 for 循环where

for aTuple in tuples where aTuple.1.contains(someData) {
    colors.append(aTuple.0)
}

有一个forEach

tuples.forEach {
    if $0.1.contains(someData) {
        colors.append($0.0)
    }
}

如果你喜欢reduced(into:_:)

let colors = tuples.reduce(into: [UIColor]()) { partialResult, current in
    guard current.1.contains(someData) else { return }
    partialResult.append(current.0)
}

而且还在return colors.isEmpty ? [.clear] : colors最后。

2022-07-17