Могу ли я сделать поиск по шаблону (*) на github.com?

В swift 3 вы можете использовать index(where:):

var myArray = ["a", "b", "d", "e"]
let newElement = "c"
if let index = myArray.index(where: { $0 > newElement }) {
    myArray.insert(newElement, at: index)
}

Обратите внимание, что в этом случае вам нужно отменить условие внутри закрытия (т. е. > вместо < для увеличения элементов в массиве), потому что интересующий вас индекс - это первый элемент, который НЕ соответствует предикату. Кроме того, этот метод вернет nil, если вновь вставленный элемент будет последним в массиве (newElement = "z" в примере выше.

Для удобства это можно обернуть в отдельную функцию который будет обрабатывать все эти проблемы:

extension Collection {
    func insertionIndex(of element: Self.Iterator.Element,
                        using areInIncreasingOrder: (Self.Iterator.Element, Self.Iterator.Element) -> Bool) -> Index {
        return index(where: { !areInIncreasingOrder($0, element) }) ?? endIndex
    }
}

Использование:

var myArray = ["a", "b", "d", "e"]
let newElement = "c"
let index = myArray.insertionIndex(of: newElement, using: <)
myArray.insert(newElement, at: index)
15
задан slugmandrew 28 March 2014 в 17:00
поделиться