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

Swift开关模式与数组匹配

宋建本
2023-03-14
问题内容

想知道是否有一种方法可以在Swift中执行以下操作。

let foo = [1, 2, 3]
let bar = [4, 5, 6]

let value = 5

switch value {
case in foo
    print("5 is in foo")
case in bar
    print("5 is in bar")
default:
    break
}

我知道我还有其他方法可以使这个人为的示例工作,例如case 4, 5, 6:是否使用开关,而是使用开关,bar.contains(value)但是我正在寻找一种解决方案,具体涉及将开关模式匹配到阵列。谢谢!


问题答案:

您可以定义一个自定义模式匹配运算符~=,该运算符 将一个数组作为“模式”和一个值:

func ~=<T : Equatable>(array: [T], value: T) -> Bool {
    return array.contains(value)
}

let foo = [1, 2, 3]
let bar = [4, 5, 6]

let value = 5

switch value {
case foo:
    print("\(value) is in foo")
case bar:
    print("\(value) is in bar")
default:
    break
}

类似的运算符已经存在,例如间隔:

public func ~=<I : IntervalType>(pattern: I, value: I.Bound) -> Bool


 类似资料:
  • 函数组合 让我们创建两个函数: scala> def f(s: String) = "f(" + s + ")" f: (String)java.lang.String scala> def g(s: String) = "g(" + s + ")" g: (String)java.lang.String compose compose 组合其他函数形成一个新的函数 f(g(x)) scala>

  • 问题内容: 在Swift中,有一个通用的模式可以用来解开可选项: 我目前正在执行这种模式匹配,但是在切换情况下使用元组,其中两个参数都是可选的: 但是,此打印: 有没有一种方法可以使我的选配和模式匹配不为零而展开?目前,我的解决方法是: 问题答案: 您可以使用以下模式: 只是的快捷方式,因此等效于

  • 问题内容: 如何找到具有匹配模式的所有键的计数。 例如,有两个键和。常见的模式是。因此,这里的计数是2。 如何在Redis中做到这一点? 问题答案: 免责声明 我希望这个旧答案不会损坏任何具有数百万把钥匙的生产系统。如果出于某种原因仍要在生产中仍然计算redis的匹配键,最好使用具有匹配模式的scan。 如果仅使用KEYS进行搜索,并使用Redis客户端,您将获得所有匹配密钥的数字列表,对吗? 例

  • 问题内容: 在Swift中,查看字符串是否与模式匹配的简单方法是什么? 伪代码示例: (我已阅读斯威夫特文档并没有看到一个正则表达式的能力。我读过有关增加一个新的运营商是一个好主意,但不是我想,因为这是一个教学项目。我已经尝试了更复杂的,但收到错误:“字符串”没有成员“ rangeOfString”。我正在寻找一种Swift解决方案,即未键入NSRegularExpression。我不需要对匹配结

  • 模式匹配与匿名函数 上一章总结了模式在 Scala 中的几种用法,最后提到了匿名函数。 这一章,我们具体的去学习如何在匿名函数中使用模式。 如果你参与过 Coursera 上的 那门 Scala 课程 , 或者写过 Scala 代码,那很可能你已经熟悉匿名函数。 比如说,将一组歌名转换成小写格式,你可能会定义一个匿名函数传递给 map 方法: val songTitles = List("The