当前位置: 首页 > 面试题库 >

如何在Swift中优雅地比较元组?

唐修能
2023-03-14
问题内容

我有2个不同的元组类型(Double,Double):

let tuple1: (Double, Double) = (1, 2)
let tuple2: (Double, Double) = (3, 4)

我想使用一个简单的if语句比较它们​​的值。就像是:

if (tuple1 == tuple2) {
    // Do stuff
}

这将引发以下错误:

找不到’==’的重载,该重载接受提供的参数

我当前的解决方案是这样的功能:

func compareTuples <T: Equatable> (tuple1: (T, T), tuple2: (T, T)) -> Bool {
    return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1)
}

我已经尝试编写扩展,但是不能使其用于元组。您对此问题是否有更优雅的解决方案


问题答案:

更新资料

正如Martin
R
在评论中指出的那样,最多可以将具有六个组成部分的元组与进行比较==。具有不同组件数或不同组件类型的元组被视为不同类型,因此无法进行比较,但是下面描述的简单情况的代码现在已过时。

试试这个:

func == <T:Equatable> (tuple1:(T,T),tuple2:(T,T)) -> Bool
{
   return (tuple1.0 == tuple2.0) && (tuple1.1 == tuple2.1)
}

与您的完全一样,但是我叫它==。然后像:

(1, 1) == (1, 1)

是真实的

(1, 1) == (1, 2)

是假的



 类似资料:
  • 问题内容: 因为不接受运算符,有没有一种快速比较两个字典的简便方法? 通过比较两个字典,我的意思是检查它们是否具有相同的精确键,并且对于每个键都具有相同的值。 问题答案: 正如Hot Licks所述,您可以使用NSDictionary方法isEqualToDictionary()来检查它们是否相等,如下所示: 您还可以实现自定义运算符“ ==”,如下所示: Xcode 9•Swift 4 从文档开

  • 人生太短,不能写没人会读的废话,如果你写了废话,没人会去读。所以好一点的文档是最好的。经理不会去理解这些东西,因为不好的文档会给他们错误的安全感以至于他们不敢依赖他们的程序员。如果一些人绝对坚持你真的在写没用的文档,就告诉他们“是的”,然后安静的找一份更好的工作。 没有其他事情比精确估计 把好的文档转为放松文档要求的估计 更为有效率。真相是冷酷而艰难的:文档,就像测试,会花比开发代码多几倍的时间。

  • 问题内容: 我一直在阅读编程书,作者展示了一个类似的示例: 所以,我想知道为什么为什么等于假?如何比较这两个元组? 顺便说一句,这本书没有解释。 问题答案: 比较元组的位置:将第一元组的第一项与第二元组的第一项进行比较;如果它们不相等(即第一个大于或小于第二个),则这是比较的结果,否则将考虑第二个,然后是第三个,依此类推。 请参阅常见序列操作: 相同类型的序列也支持比较。特别是,通过比较相应的元素

  • 让我们假设我们有这样一个用java编写的普通守护进程: 我们使用 来守护它,默认情况下,它会在 上发送 (TERM) 信号 假设当前执行的步骤是#2,此时我们正在发送项信号。 发生的情况是执行立即终止。 我发现我可以使用<code>addShutdownHook()</code>处理信号事件,但问题是它仍然会中断当前的执行,并将控制传递给处理程序: 所以,我的问题是——有没有可能不中断当前的执行,

  • 在这种情况下,优雅地关闭WebSocket的正确方法是什么?

  • 在我的webapp中,我创建了一个使用具有固定大小线程池的的服务。我在整个应用程序生命周期中重用相同的。 All在Tomcat中运行,在关闭时出现以下错误: 我确实意识到在关闭tomcat之前需要关闭ExecutorService。Soms所以线程已经谈到了这一点,但我找不到一个干净的方法来处理这一点。 我是否应该使用,就像@tim-bender建议的那样,在优雅地关闭线程和执行器?还是应该使用C