【发布时间】:2014-07-26 06:10:31
【问题描述】:
我输入了一组数字Int。
我想遍历这个数组并确定每个数字是奇数还是偶数。
在 Swift 中如何判断一个数是奇数还是偶数?
【问题讨论】:
我输入了一组数字Int。
我想遍历这个数组并确定每个数字是奇数还是偶数。
在 Swift 中如何判断一个数是奇数还是偶数?
【问题讨论】:
使用% Remainder Operator(又名模运算符)来检查一个数字是否是偶数:
if yourNumber % 2 == 0 {
// Even Number
} else {
// Odd Number
}
或者,使用remainder(dividingBy:)进行同样的检查:
if yourNumber.remainder(dividingBy: 2) == 0 {
// Even Number
} else {
// Odd Number
}
【讨论】:
extension Int { var isEven: Bool { return (self % 2 == 0) } }
isEven 方法作为 Int 类型的扩展。但总体而言,您必须检查它是奇数还是偶数。因此,您将使用 if ... else... 和 isEven 方法。那么缩短在哪里?事实上,如果你只做一次,为什么要对原语进行抽象?有什么收获?
var myArray = [23, 54, 51, 98, 54, 23, 32];
for myInt: Int in myArray{
if myInt % 2 == 0 {
println("\(myInt) is even number")
} else {
println("\(myInt) is odd number")
}
}
【讨论】:
img1.isHidden = pageNumber % 2 == 0和img2.isHidden = pageNumber % 2 != 0
Swift 5 将函数 isMultiple(of:) 添加到 BinaryInteger 协议中。
let even = binaryInteger.isMultiple(of: 2)
let odd = !binaryInteger.isMultiple(of: 2)
这个函数可以用来代替%进行奇偶校验。
此功能是通过 Swift Evolution 流程添加的:
值得注意的是,isEven 和 isOdd 被提议但没有在同一次审核中被接受:
考虑到
isMultiple(of:)的加入,核心团队认为isEven和isOdd与isMultiple(of: 2)相比没有实质性优势。因此,该提案接受了修改。
isMultiple(of:)被接受,但isEven和isOdd被拒绝。
如果需要,可以通过扩展轻松添加这些方法:
extension BinaryInteger {
var isEven: Bool { isMultiple(of: 2) }
var isOdd: Bool { !isEven }
}
【讨论】:
“奇偶校验”是奇偶数的数学概念的名称:
您可以扩展 Swift BinaryInteger 协议以包含 parity 枚举值:
enum Parity {
case even, odd
init<T>(_ integer: T) where T : BinaryInteger {
self = integer.isMultiple(of: 2) ? .even : .odd
}
}
extension BinaryInteger {
var parity: Parity { Parity(self) }
}
这使您能够在整数上switch 并优雅地处理这两种情况:
switch 42.parity {
case .even:
print("Even Number")
case .odd:
print("Odd Number")
}
【讨论】:
你可以使用filter方法:
let numbers = [1,2,3,4,5,6,7,8,9,10]
let odd = numbers.filter { $0 % 2 == 1 }
let even = numbers.filter { $0 % 2 == 0 }
【讨论】: