Вы можете использовать эту библиотеку: BigInt
Установите его с помощью CocoaPods:
pod 'BigInt'
Тогда вы можете использовать его следующим образом:
import BigInt
func factorial(_ n: Int) -> BigInt {
if n == 0 {
return 1
}
else {
return BigInt(n) * factorial(n - 1)
}
}
print( factorial(50) ) // 30414093201713378043612608166064768844377641568960512000000000000
Ваш код не будет компилироваться, потому что вы используете объект как личность. Вам нужно указать его:
public int compareTo(Object object) throws ClassCastException{
return age - ((Person)object).age;
}
И вам нужна только одна строка, и вы можете напрямую обращаться к полям.
Что позволяет Comparable
для вас сортировать объекты Person
, когда они находятся в контейнере, например List
или Array
.
Предлагаю посмотреть Arrays
и Collections
для того, как это сделать.
Контракт для метода compareTo(Object obj)
требует возврата:
this
следует считать меньше obj
this
равно obj
this
больше obj
Таким образом вы можете определить поведение сортировки для своего класса.
Arrays.sort(people);
Обратите внимание, что вы можете сортировать объекты назад, просто инвертируя знак возврата value.
Как побочная заметка, некоторые методы сортировки позволяют вам передать Comparator
вместе с коллекцией, которую вы хотите отсортировать, что позволяет вам определить другой критерий сортировки, отличный от стандартного.
Arrays.sort(people, new Comparator<Person>() { ... });
compareTo()
?
– Andreas Fester
20 February 2014 в 11:33
compareTo
, а не для другой реализации
– Marco Bolis
20 February 2014 в 11:34
compareTo
НЕ требует возврата -1, 0 или 1.
– Dawood ibn Kareem
20 February 2014 в 11:46
Arrays.sort(arr)
в какой-то момент. – Dawood ibn Kareem 20 February 2014 в 11:49