在 Swift 中如何知道一个数字是奇数还是偶数?
Posted
技术标签:
【中文标题】在 Swift 中如何知道一个数字是奇数还是偶数?【英文标题】:How to know if a number is odd or even in Swift? 【发布时间】:2014-07-26 06:10:31 【问题描述】:我输入了一组数字Int
。
我想遍历这个数组并确定每个数字是奇数还是偶数。
在 Swift 中如何判断一个数是奇数还是偶数?
【问题讨论】:
【参考方案1】:使用%
Remainder Operator(又名模运算符)来检查一个数字是否是偶数:
if yourNumber % 2 == 0
// Even Number
else
// Odd Number
或者,使用remainder(dividingBy:)
进行同样的检查:
if yourNumber.remainder(dividingBy: 2) == 0
// Even Number
else
// Odd Number
【讨论】:
那么有更好更快的方法来使用 AND (&) 运算符 let inputArray = [23,25,2,4,9] for x in inputArray if ( x&1 == 1 ) 打印 (“奇数”) 其他 打印 (“偶数”) @i.AsifNoor 我同意你的看法。但是模数(从除法中得到休息)操作在所有语言中都有相同的代码。 SHORT WAY extension Int func isEven() -> Bool return (self % 2 == 0) 还短:extension Int var isEven: Bool return (self % 2 == 0)
:D 愚蠢。您的意思是创建 isEven
方法作为 Int
类型的扩展。但总体而言,您必须检查它是奇数还是偶数。因此,您将使用 if ... else...
和 isEven
方法。那么缩短在哪里?事实上,如果你只做一次,为什么要对原语进行抽象?有什么收获?【参考方案2】:
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")
【讨论】:
哦,对不起!是的,它已经死了。实际上,在编码时,我在上面的代码中遇到了编译错误。因此,它也向我显示了在线错误(我在哪里使用 % 和 / 运算符)。 这是一个函数式方法: let numbers = [0, 1, 2, 3] let evenNumbers = numbers.filter $0 % 2 == 0 letoddNumbers = numbers.filter $0 % 2 ! = 0 我用这个和.isHidden,比如img1.isHidden = pageNumber % 2 == 0
和img2.isHidden = pageNumber % 2 != 0
【参考方案3】:
Swift 5 将函数 isMultiple(of:)
添加到 BinaryInteger
协议中。
let even = binaryInteger.isMultiple(of: 2)
let odd = !binaryInteger.isMultiple(of: 2)
这个函数可以用来代替%
进行奇偶校验。
此功能是通过 Swift Evolution 流程添加的:
Preliminary Discussion in Swift Forum Swift Evolution Proposal Accepted Swift Evolution Implementation值得注意的是,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
【讨论】:
【参考方案4】:“奇偶校验”是奇偶数的数学概念的名称:
https://en.wikipedia.org/wiki/Parity_(mathematics)
您可以扩展 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")
【讨论】:
【参考方案5】:你可以使用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
【讨论】:
以上是关于在 Swift 中如何知道一个数字是奇数还是偶数?的主要内容,如果未能解决你的问题,请参考以下文章