Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >复合开关情况:对于具有相同类型关联值的复合枚举情况,我们可以使用单一的公共值绑定吗?

复合开关情况:对于具有相同类型关联值的复合枚举情况,我们可以使用单一的公共值绑定吗?
EN

Stack Overflow用户
提问于 2016-12-20 13:54:42
回答 1查看 2.8K关注 0票数 17

(当我准备并几乎写完这个问题时,重新阅读适当的语言指南部分给我回答了,但可能问答对其他人有用,所以我还是会把它发出去。)

背景

考虑下面的enum,其中有两种不同类型的关联值IntString中的一种

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum Foo {
    case bar(Int)
    case baz(Int)
    case bax(Int)
    case fox(String)
}

switch语句中执行模式匹配时,我们可以构造复合案例,每个案例涵盖几个可能的匹配模式(如果有任何模式匹配,则进入case分支):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func foo(_ foo: Foo) -> Int {
    switch foo {
        case .bar, .baz, .bax: return 42
        case .fox: return 0
    }
}

就像非复合案例一样,复合案例也可能包括价值约束:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func foo(_ foo: Foo) -> Int {
    switch foo {
        case .bar(let x), .baz(let x), .bax(let x): return x 
        case .fox(let y): return Int(y) ?? 0
    }
}

// or
func foo(_ foo: Foo) -> Int {
    switch foo {
        case let .bar(x), let .baz(x), let .bax(x): return x 
        case let .fox(y): return Int(y) ?? 0
    }
}

问题

  • 是否可以对复合案例使用单一的公共值绑定,它涵盖具有相同类型关联值的几个enum案例的复合?

例如,在上面的后一个值绑定示例中,可以为复合case中的公共类型关联值使用单个绑定功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// not valid
func foo(_ foo: Foo) -> Int {
    switch foo {
        case .bar, .baz, .bax, (let x): return x 
        case .fox: return 0
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-20 13:54:42

不,这是不可能的;在上面的值绑定示例中,必须在每个模式中绑定x,并且对于复合案例中的每个模式,这必须是分开的。

引用语言指南-控制流程 Quoting 的话

复合案例也可以包括值绑定。复合案例的所有模式都必须包含相同的值绑定,而每个绑定必须从复合case中的所有模式中获得相同类型的值。这确保了,无论复合大小写的哪一部分匹配,大小写主体中的代码始终可以访问绑定的值,并且该值始终具有相同的类型。

在上面的复合示例中,我们尝试省略其中一个模式中的绑定,在这个主题上,我们得到了一个不言自明的错误信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func foo(_ foo: Foo) -> Int {
    switch foo {
        case .bar(_), .baz(let x), .bax(let x): return x 
        case .fox: return 0
    }
}

错误:必须在每个模式中绑定“X”

即使我们在下面的主体中不使用x,这仍然有效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func foo(_ foo: Foo) -> Int {
    switch foo {
        case .bar(_), .baz(let x), .bax(let x): return 0 
        case .fox: return 0
    }
} // same error
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41251872

复制
相关文章
Trie树
他会自动显示相关的搜索,不知道有没有想过这个功能是如何实现的呢?面对海量的数据,它怎么能在我输入的同时,如此快速的检索到相关内容呢?当我查找资料后,就遇到了它,Trie树。
烟草的香味
2019/11/11
6480
Trie树
Trie树
Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
全栈程序员站长
2022/07/14
2540
Trie树
这周将Trie树看了一下下面进行总结 概念:Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本
用户1624346
2018/04/11
7600
Trie树
从Trie树到双数组Trie树
Trie树 原理 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,能在常数时间O(len)内实现插入和查
JadePeng
2018/03/12
3.2K0
从Trie树到双数组Trie树
字典树(Trie树)
例如,单词序列a, to, tea, ted, ten, i, in, inn,对应的trie。
全栈程序员站长
2022/07/15
4910
字典树(Trie树)
动画Trie树
Trie树也称之为前缀树,适合处理前缀匹配问题。也因为每一个节点都存储26个字母,也称之为字典树,发明Trie树的人喜欢把这个单词读成/ˈtriː/tree,其他人喜欢读成/ˈtraɪ/ "try"。
ACM算法日常
2021/07/16
4160
Trie树分析
Trie树 Trie树介绍 Trie,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 它有3个基本性质: 1.根节点不包含字符,除根节点外每一个节点都只包含一个字符。 2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 3.每个节点的所有子节点包含的字符都不相同。 Trie中每个节点有一个特殊标记作为结束符号,通过该标记可以判断当前节
汤高
2018/03/28
1.2K0
Trie树分析
[奇怪但有用的数据结构]Trie前缀树
想象一个这样的情景,有一个很大的字典包含了很多的单词,需要判断一个新单词是否在字典中,最直接也最快的办法就是使用哈希表了。现在添加一个条件,判断字典里是否存在单词以新单词为前缀,这时候哈希表就不合适了,因为存在单词在字典中但其前缀不在字典中的情况,例如[‘apple’, 'application','append']这个字典并不包含他们的公共前缀'app','ap'和‘a’。所以我们需要一种新的数据结构和算法来处理这类问题。
杜逸先
2018/06/08
2K0
[奇怪但有用的数据结构]Trie前缀树
js实现trie树
function Node(options) { options = options || {}; this.val = options.val; this.isCapital = null; this.position = options.position; } function position(str) { var code = str.charCodeAt(0); if (code >= 65 && code <= 97) { ret
theanarkh
2019/03/06
2.8K0
算法模板——Trie树
实现功能——实现对于不同字符串以及之前出现过的字符串的识别,对于单个长度为L的字符串,复杂度为O(L); 代码不难懂,直接上(在识别字符串方面,个人觉得其好处远远大于hash识别——1.理论上都是O(L) 2.哈希弄不好撞车撞一大串,尤其是哈希策略不太好的时候,而这个绝对不可能撞,严格的O(L) 3.这个代码真心短,一点也不比hash长,只要你链表还会用) 1 type 2 pp=^nod; 3 nod=record 4 ex:longint; 5
HansBug
2018/04/10
5120
Trie树使用实例
本文简单介绍下apache collection4中的PatriciaTrie的使用。
code4it
2018/09/17
1.2K0
编程之美--2. Trie树 (Trie图)
#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字符串是不是这
Gxjun
2018/03/26
1.2K0
编程之美--2.  Trie树  (Trie图)
【HDU - 5790 】Prefix(主席树+Trie树)
求[min((Z+L)%N,(Z+R)%N)+1,max((Z+L)%N,(Z+R)%N)+1]中不同前缀的个数,Z是上次询问的结果,N是字符串总个数。Q次询问。
饶文津
2020/06/02
2860
周末补习(一)trie 树
Trie 树又叫字典查找树。顾名思义,字典查找树,主要解决的就是字符串的查找。有以下两个优势。
用户2060079
2020/03/09
5690
Trie树模板与应用
Trie树是用来快速存储和查找 字符串集合的数据结构。某个字符串集合对应的有根树。树的每条边上对应有恰好一个字符,每个顶点代表从根到该节点的路径所对应的字符串(将所有经过的边上的字符按顺序连接起来)。利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
timerring
2023/06/13
2470
Trie树模板与应用
Trie字典树的巧用
字典树(Trie)是将若干个字符串建成一棵树,一条边有一个字符,从根节点出发的一条树链上的字符排起来就成了一个字符串,需要在单词的终点处打标记。
灯珑LoGin
2022/10/31
2880
trie树(字典树)-HDU1251
举一个例子,给50000个由小写字母构成的长度不超过10的单词,然后问某个公共前缀是否出现过。如果我们直接从字符串集中从头往后搜,看给定的字符串是否为字符串集中某个字符串的前缀,那样复杂度为O(50000^2),这样显然会TLE。又或是我们对于字符串集中的每个字符串,我们用MAP存下它所有的前缀。然后询问时可以直接给出结果。这样复杂度为O(50000*len),最坏情况下len为字符串最长字符串的长度。而且这没有算建立MAP存储的时间,也没有算用MAP查询的时间,实际效率会更低。但如果我们用trie的话,当查询如字符串abcd是否为某字符串的前缀时,显然以b,c,d....等不是以a开头的字符串就不用查找了。实际查询复杂度只有O(len),建立trie的复杂度为O(50000).这是完全可以接受的。
ACM算法日常
2018/08/07
1.2K0
trie树(字典树)-HDU1251
字典树Trie(单词查找树)详解
  算法导论中,Trie叫做“基数树”。其应用范围不仅和字符串有关,本质上其实是个N叉树。   在N叉树上,如果共父节点的N个子节点是有序的字符序列,构造出来就很像字典树了。
地鼠窝里有个Gopher
2022/10/30
6870
剑指Offer——Trie树(字典树)
Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。
全栈程序员站长
2022/10/03
9210
剑指Offer——Trie树(字典树)
DS哈希查找--Trie树
它是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
叶茂林
2023/07/30
2060
DS哈希查找--Trie树

相似问题

在trie树中实现模式匹配

12

Python中的Trie (前缀树)

52

Solr数值Trie与传统trie (前缀树)

13

从trie树中删除所有

33

Trie vs B+树

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文