Для начала я бы поставил точку останова и посмотрел, как выглядит ваш объект ответа с любой конечной точки, на которую вы попали. Возможно, это действительно первые три элемента массива?
Переходя к конкретному вопросу, я бы использовал протокол Codable
для расшифровки вашего ответа. Я пропущу часть Alamofire и сосредоточусь исключительно на расшифровке объекта. Используя ваш пример, вот как будет выглядеть структура:
struct ResponseObject: Codable {
let name: String
let location: String
}
Я бы не использовал оператор взрыва (!
) в вашем коде, так как вы сгенерируете исключение, если скажете компилятору, что это 100% гарантированных денег в банке объект не ноль и это на самом деле. Вместо этого разверните дополнительные.
Вам понадобится место для ваших декодированных данных, чтобы вы могли объявить пустой массив ответов следующим образом:
var arrayOfObjects: [ResponseObject] = []
Затем вы просто объявите декодер и расшифруете свои данные. :
let decoder = JSONDecoder()
do {
if let data = rawData {
arrayOfObjects = try decoder.decode([ResponseObject].self, from: data)
print("number of objects:", arrayOfObjects.count)
let slice = arrayOfObjects.prefix(3)
arrayOfObjects = Array(slice)
print("number of objects after slicing the array:", arrayOfObjects.count)
}
} catch {
print(error)
}
Вместо циклического перемещения по массиву, просто возьмите первые три элемента массива с помощью .prefix(3)
. Поигравшись с этим только сейчас, я попытался добавить к первым 10 элементам массива префикс с 4, и он не сгенерировал исключение, поэтому я думаю, что это должно сработать без предварительной проверки счетчика массива.
Я бы посоветовал взглянуть на документацию Swift онлайн по адресу: Arrays, или вы можете получить довольно симпатичное приложение для Mac OS под названием Dash, которое позволяет вам загружать наборы документов для нескольких языков на вашем компьютере локально.
Удачи!
Сначала вычислите вероятность, что нет коллизии:
hashes_picked = 100
single_collision_odds = 50000
# safe_combinations is number of ways to pick hashes that don't overlap
safe_combinations = factorial(single_collision_odds) / factorial(single_collision_odds - hashes_picked)
# all_combinations is total number of ways to pick hashes
all_combinations = single_collision_odds ** hashes_picked
collision_chance = (all_combinations - safe_combinations) / all_combinations
Это много походит на День рождения Paradox мне.
Необходимо смочь просто заменить набором возможных дней рождения (365) с возможными хешами (50000) и выполнить те же вычисления, которые они представляют там.
Если Вы изменяете сценарий Python, представленный в статье для Ваших значений:
def bp(n, d):
v = 1.0
for i in range(n):
v = v * (1 - float(i)/d)
return 1 - v
print bp(2, 50000)
Вы заканчиваете с разногласиями коллизии на двух числах 0,00002. Приблизительно 265 образцов, у Вас есть приблизительно 50%-й шанс наличия коллизии.
Это называют проблемой Дня рождения. Для решения его думайте вместо этого о разногласиях того, чтобы там быть никакими коллизиями (назовите это PNC).