60

我输入了一个数字数组Int

我想遍历这个数组并确定每个数字是奇数还是偶数。

如何在 Swift 中确定一个数字是奇数还是偶数?

4

5 回答 5

124
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")
  }
}
于 2014-06-05T10:05:16.777 回答
35

使用% 余数运算符(又名模运算符)检查一个数是否为偶数:

if yourNumber % 2 == 0 {
  // Even Number
} else {
  // Odd Number
}

或者,用于remainder(dividingBy:)进行相同的检查:

if yourNumber.remainder(dividingBy: 2) == 0 {                
  // Even Number 
} else {
  // Odd Number
}
于 2014-06-05T10:02:30.007 回答
15

Swift 5 将该功能添加isMultiple(of:)BinaryInteger协议中。

let even = binaryInteger.isMultiple(of: 2) 
let odd = !binaryInteger.isMultiple(of: 2)

此功能可用于代替%奇数/偶数检查。


此功能是通过 Swift Evolution 流程添加的:

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

鉴于添加isMultiple(of:),核心团队认为isEvenisOdd没有提供任何实质性的优势isMultiple(of: 2)

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

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

extension BinaryInteger {
    var isEven: Bool { isMultiple(of: 2) }
    var isOdd:  Bool { !isEven }
}
于 2020-05-16T23:18:55.223 回答
5

“奇偶校验”是奇数和偶数的数学概念的名称:

https://en.wikipedia.org/wiki/Parity_(数学)

您可以扩展 SwiftBinaryInteger协议以包含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")
}
于 2020-05-23T04:00:41.187 回答
0

您可以使用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 }
于 2020-08-02T03:33:49.690 回答