Обрезать массив после сопоставления двух строк - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу знать, как обрезать массив путем сопоставления двух строк.Есть один большой массив, и мне нужно обрезать этот массив, сопоставляя начальную и конечную строки.

У меня есть этот массив.

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, и мне нужно обрезать массив в соответствии с часом открытия и часом закрытия.

Предположим, я получил «6 утра» как час открытия и «10 вечера» как час закрытия с точки зрения выбора, а затем мой новый массивдолжно быть

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

Какой хороший способ сделать это.На самом деле мне нужны эти новые массивы, чтобы показать в ячейке таблицы.Количество ячеек в табличном представлении зависит от этих новых массивов.

1 Ответ

0 голосов
/ 02 апреля 2019

Используйте 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"))
[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...