微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Swift 5中检查3个变量是否彼此相等?

如何解决如何在Swift 5中检查3个变量是否彼此相等?

我目前正在开发一个需要相互比较三个变量的应用程序。

比较规则:仅在以下情况下结果应为true: 所有三个变量都相等 OR 所有三个变量都不同

我的第一个想法是这样的,但我希望对此有一个更优雅的解决方案:

if (value1 == value2 && value2 == value3) || (value1 != value2 && value2 != value3 && value3 != value1) {
    // True
} else {
    // False
}

如果你们当中有人能想到一个更优雅的解决方案并与我分享,我将非常高兴。 感谢您的提前帮助!

解决方法

如果您的值也是package com.simple.Test; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; /** * * @author megaLinux */ public class User { private StringProperty name = new SimpleStringProperty(); public String getName() { return name.get(); } public StringProperty nameProperty() { return name; } public void setName(String name) { this.name.set(name); } } ,则可以使用Hashable。鉴于Set会丢弃重复的值,您可以将检查简化为以下内容:

Set
,

一次过,还不错。

更“通用”的解决方案有点混乱,因为它需要跟踪2个不同的布尔变量,并正确处理空集合。

let valuesArray = [value1,value2,value3]
let valuesSet = Set(valuesArray)

if valuesSet.count == 1 || valuesSet.count == valuesArray.count {
    // True
} else {
    // False
}

如果此算法针对extension Sequence where Element: Equatable { func classifyElementEquality() -> (allEqual: Bool,allUnequal: Bool) { var iterator = self.makeIterator() guard let first = iterator.next() else { return (true,true) // all empty } return AnyIterator(iterator) .reduce(into: (allEqual: true,allUnequal: true)) { acc,element in if first == element { acc.allUnequal = false } else { acc.allEqual = false } } } } let (value1,value3) = (1,2,3) let result = [value1,value3].classifyElementEquality() if result.allEqual || result.allUnequal { print("They're either all equal,or all unequal") } else { print("Some of them are different") } 的{​​{1}}实例,则可以简化一点,因为访问第一个元素比较容易,而无需手动管理迭代器。

Collection

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。