Trim 匹配两个字符串后的数组
Trim array after matching two strings
我想知道如何通过匹配两个字符串来 trim 数组。有一个大数组,我必须通过匹配起始字符串和结束字符串来 trim 该数组。
我有这个数组。
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"]
我得到两个字符串,即 Opening Hour 和 Closing Hour。这些值是从 PickerView 中选取的,我需要 trim 根据营业时间和营业时间来排列数组。
假设我从选择器视图中得到“6AM”作为开放时间,“10PM”作为关闭时间,那么我的新数组应该是
var newtimeArray = ["6AM", "7AM", "8AM", "9AM", "10AM", "11AM", "12PM",
"1PM", "2PM", "3PM", "4PM", "5PM", "6PM", "7PM",
"8PM", "9PM", "10PM"]
执行此操作的好方法是什么。实际上我需要这些新数组显示在 table 视图的单元格中。 table 视图中的单元格数量取决于这些新数组。
用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"))
[]
我想知道如何通过匹配两个字符串来 trim 数组。有一个大数组,我必须通过匹配起始字符串和结束字符串来 trim 该数组。
我有这个数组。
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"]
我得到两个字符串,即 Opening Hour 和 Closing Hour。这些值是从 PickerView 中选取的,我需要 trim 根据营业时间和营业时间来排列数组。
假设我从选择器视图中得到“6AM”作为开放时间,“10PM”作为关闭时间,那么我的新数组应该是
var newtimeArray = ["6AM", "7AM", "8AM", "9AM", "10AM", "11AM", "12PM",
"1PM", "2PM", "3PM", "4PM", "5PM", "6PM", "7PM",
"8PM", "9PM", "10PM"]
执行此操作的好方法是什么。实际上我需要这些新数组显示在 table 视图的单元格中。 table 视图中的单元格数量取决于这些新数组。
用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"))
[]