【问题标题】:How to know if a number is odd or even in Swift?在 Swift 中如何知道一个数字是奇数还是偶数?
【发布时间】:2014-07-26 06:10:31
【问题描述】:

我输入了一组数字Int

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

在 Swift 中如何判断一个数是奇数还是偶数?

【问题讨论】:

    标签: ios swift parity


    【解决方案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 流程添加的:

    值得注意的是,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 }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-31
          • 1970-01-01
          • 2011-09-06
          • 2011-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-28
          相关资源
          最近更新 更多