匹配两个字符串后修剪数组

时间:2019-04-02 02:55:53

标签: swift swift4

我想知道如何通过匹配两个字符串来修剪数组。有一个大数组,我必须通过匹配开始字符串和结束字符串来修剪该数组。

我有这个数组。

var timeArray = ["1AM",  "2AM",  "3AM",  "4AM",  "5AM",  "6AM", "7AM",
                 "8AM",  "9AM",  "10AM", "11AM", "12PM", "1PM", "2PM",
                 "3PM",  "4PM",  "5PM",  "6PM",  "7PM",  "8PM", "9PM", 
                 "10PM", "11PM", "12AM"]

我得到两个字符串,即营业时间营业时间。这些值是从PickerView中选取的,我需要根据打开时间和关闭时间来修剪数组。

假设从选择器视图中我将“ 6AM”作为开放时间,将“ 10PM”作为封闭时间,那么我的新数组应该是

var newtimeArray = ["6AM", "7AM", "8AM", "9AM", "10AM", "11AM", "12PM",
                    "1PM", "2PM", "3PM", "4PM", "5PM",  "6PM",  "7PM", 
                    "8PM", "9PM", "10PM"]

执行此操作的好方法是什么。实际上,我需要这些新数组在表格视图的单元格中显示。表格视图中的单元格数量取决于这些新的数组。

1 个答案:

答案 0 :(得分:0)

使用firstIndex(of:)查找打开和关闭时间的索引,然后使用这些索引查找原始数组的子数组以构造答案:

func makeTimeArray(open: String, close: String) -> [String] {
    let timeArray = ["1AM", "2AM", "3AM", "4AM", "5AM", "6AM", "7AM", "8AM", "9AM", "10AM", "11AM", "12PM", "1PM", "2PM", "3PM", "4PM", "5PM", "6PM", "7PM", "8PM", "9PM","10PM", "11PM", "12AM"]

    guard let openIdx = timeArray.firstIndex(of: open),
          let closeIdx = timeArray.firstIndex(of: close)
        else { return [] }

    if openIdx <= closeIdx {
        // straightforward case
        return Array(timeArray[openIdx...closeIdx])
    } else {
        // handle wraps past midnight
        return Array(timeArray[openIdx...] + timeArray[...closeIdx])
    }
}

示例:

print(makeTimeArray(open: "8PM", close: "2AM"))
["8PM", "9PM", "10PM", "11PM", "12AM", "1AM", "2AM"]
print(makeTimeArray(open: "2PM", close: "2PM"))
["2PM"]
print(makeTimeArray(open: "8AM", close: "2PM"))
["8AM", "9AM", "10AM", "11AM", "12PM", "1PM", "2PM"]
print(makeTimeArray(open: "13AM", close: "8PM"))
[]