Вот возможная реализация в Swift с использованием двоичного поиска (из http://rosettacode.org/wiki/Binary_search#Swift с небольшими изменениями):
extension Array {
func insertionIndexOf(elem: Element, isOrderedBefore: (Element, Element) -> Bool) -> Int {
var lo = 0
var hi = self.count - 1
while lo <= hi {
let mid = (lo + hi)/2
if isOrderedBefore(self[mid], elem) {
lo = mid + 1
} else if isOrderedBefore(elem, self[mid]) {
hi = mid - 1
} else {
return mid // found at position mid
}
}
return lo // not found, would be inserted at position lo
}
}
Как и в случае indexOfObject:inSortedRange:options:usingComparator:
, предполагается, что массив сортируется относительно компаратора. Он возвращает либо (любой) индекс элемента, если элемент уже присутствует в массиве, либо индекс, в который он может быть вставлен при сохранении порядка. Это соответствует NSBinarySearchingInsertionIndex
метода NSArray
.
Использование:
let newElement = "c"
let index = myArray.insertionIndexOf(newElement) { $0 < $1 } // Or: myArray.indexOf(c, <)
myArray.insert(newElement, atIndex: index)
Привязка поддерживает различные протоколы. Эта страница на MSDN на самом деле имеет хорошую матрицу, которая объясняет, какие протоколы поддерживаются который привязка в WCF. Таким образом, при необходимости в interop с сервисами/клиентами, которые реализуют протоколы ОАЗИСА, используют привязку ws2007httpbinding, иначе, нет никакой причины не использовать wshttpbinding.
, Если Вы хотите войти в детали различных протоколов, проверьте их веб-сайты: WC3 и ОАЗИС . Я уверен, что существуют тонны ресурсов, которые выделяют различия в тех протоколах.
Другое крупное предприятие и правительства потребности использовать веб-сервисы и иметь различные требования. Таким образом различные стандарты имеют смысл.
Используя lastest стандарт походит на хорошую практику, но просто имейте в виду, что WS2007HttpBinding только поддерживается клиентами, которые выполняют, по крайней мере, версии среды выполнения.NET 3,5 SP1 или 3,0 SP1.
ws2007HttpBinding, определенный ОАЗИСОМ, является более новой версией, чем wsHttpBinding.
Это добавило ReliableSession, безопасность и протоколы TransactionFlow сверху Транзакций, Надежного обмена сообщениями и Обращающихся к WS протоколов wsHttpBinding.
могло быть легче запуститься с простой привязки, и при необходимости в будущем, можно всегда представлять существующие сервисы в более новой привязке, сосуществующей с более старой версией.