在 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 == 0img2.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

值得注意的是,isEvenisOdd 被提议但没有在同一次审核中被接受:

考虑到isMultiple(of:) 的加入,核心团队认为isEvenisOddisMultiple(of: 2) 相比没有实质性优势。

因此,该提案接受了修改isMultiple(of:) 被接受,但 isEvenisOdd 被拒绝。

如果需要,可以通过扩展轻松添加这些方法:

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 中如何知道一个数字是奇数还是偶数?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个数字是奇数还是偶数

如何检查整数是偶数还是奇数? [关闭]

PHP 如何检查数字是奇数还是偶数

032Java中判断某一个数字是奇数还是偶数

写一个java方法,判断给定的数字是偶数还是奇数。

怎么在indesign 将主页分别应用于奇数和偶数页 我文件做的是单页的 不是对页的