我想知道如何通过匹配两个字符串来修剪数组。有一个大数组,我必须通过匹配开始字符串和结束字符串来修剪该数组。
我有这个数组。
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"]
执行此操作的好方法是什么。实际上,我需要这些新数组在表格视图的单元格中显示。表格视图中的单元格数量取决于这些新的数组。
答案 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"))
[]