当前位置: 首页 > news >正文

saas做视频网站郑州做网站推广哪家好

saas做视频网站,郑州做网站推广哪家好,java做网站具体步骤,做非法网站怎么盈利概览 集合的概念在任何编程语言中都占有重要的位置,正所谓:“古来聚散地,宿昔长荆棘;游人聚散中,一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理,怎能不让…

在这里插入图片描述

概览

集合的概念在任何编程语言中都占有重要的位置,正所谓:“古来聚散地,宿昔长荆棘;游人聚散中,一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理,怎能不让我们满心欢喜呢?

在这里插入图片描述

在 Swift 入门学习:集合(Collection)类型趣谈-上 这篇博文中,我们已初步学习了集合的相关知识。而在下篇中,我们将继续集合的探索之旅。

在本篇博文中,您将学到如下内容:

  • 概览
  • 4. Set
  • 5. “无限大”的范围类型(Range)
  • 6. 标准库集合的扩展
  • 总结

Swift 中集合的概念简约而不简单,所以让我们闲言少叙,马上开始吧。

Let’s collect it now!!!😉


4. Set

Set 也是一种集合类型,它同样要求其内部元素都遵守 Hashable 协议:

在这里插入图片描述

字典类似, Set 也是无序的。而且每个 Hashable 值相同的元素只能在 Set 中出现一次:

在这里插入图片描述

与其它集合类似,我们也可以方便的遍历它的元素:

let set = Set<Int>([1,2,2,3,3,4,4,5,5])for i in set {print(i)
}let ary = set.map { $0 * $0}

与其它集合所不同的是,我们可以对其进行数学上的基本集合操作(Fundamental Set Operations)。

在这里插入图片描述

比如:计算两个 Set 间的并集、交集、对称差等等:

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]

我们还可以测试集合间的归属性和相等性(Set Membership and Equality):

在这里插入图片描述

比如在下面的代码中,我们就分别检查了 houseAnimals 是否是 farmAnimals 的子集、farmAnimals 是否是 houseAnimals 的超集、以及 farmAnimals 是否和 cityAnimals 完全不搭噶:

let houseAnimals: Set = ["🐶", "🐱"]
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
let cityAnimals: Set = ["🐦", "🐭"]houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true

从上面的讨论可知,除了一般意义上的集合,Set 还可以被当做数学概念上的集合来使用。

可能有的小伙伴们并不知道,早在 Objective-c 的“远古时代”就存在一种计数 Set 类型:NSCountedSet,它是 Set 的一种变体:

在这里插入图片描述

它也被用来表示一个 Set,但其中相同的元素可以重复出现。注意它是作为一个类(而不是结构)实现的:

在这里插入图片描述

5. “无限大”的范围类型(Range)

小伙伴们可能会好奇:Swift 中的集合到底能不能包含无穷多个元素?

包含无限元素的集合对于一些动态语言来说简直不要太容易,比如 ruby 语言:

在这里插入图片描述

那么,对于 Swift 这种貌似偏静态的语言也能办得到吗?答案是肯定的!

在 Swift 语言中,有一种范围(Range)类型专门用来表示一段范围内元素的集合。注意这是一种“半包(half-open)”类型,因为 Range 中的元素并不包括它的上界(upper bound)。

在这里插入图片描述

大家可能会猜到,为了增加灵活性还有一种“全包”的 Range 类型:ClosedRange。
在这里插入图片描述

创建 Range 实例更是小菜一碟,我们可以一如既往的用语法糖或是构造器来实现:

// 从 1 开始,不包括 10;下同
let half_range = 1..<10
let half_range_1 = Range(uncheckedBounds: (1,10))
// 从 1 开始,包括 10;下同
let range = 1...10
let range_1 = ClosedRange(uncheckedBounds: (1,10))

同样的,遍历范围的操作也好似“蜻蜓点水”:

for i in half_range {print(i)
}half_range.forEach { print($0)}

因为 Range 也是一种集合,所以我们可以把它轻松转换为数组:

let half_range = 1..<10
let ary = Array(half_range)

之前在介绍数组时提到过惰性序列,Range 就可以被看做一种 LazySequence。这意味着,我们可以用几乎忽略不计的代价就创建出非常“巨大”的 Range:

// 瞬间即可创建包含海量元素的 Range
let half_range = 1..<10000000000
for i in half_range.prefix(10) {print(i)
}

因为 Range 是一种惰性序列,所以它的元素只有在实际使用时才会被求值,这使得它的创建开销非常小。相反,如果我们要创建一个包含 100 亿个元素的 Array,即使只会用到前 10 个,内存也会“实打实”的被 100 亿个元素所占用,真是让人欲哭无泪!

由于 Range 足够“懒惰”,它可以表示无穷个元素。比如,在如下代码中我们用 inf_range 来表示所有自然数:

// 包含所有自然数的范围
let inf_range = 1...
for i in inf_range {if i > 10 { break }print(i)
}// 千万别这么做!!!
let inf_ary = Array(inf_range)

对于“无限大”的范围,千万不要试图将其转换为 Array,因为除了无限挂起你啥也得不到。


有的小伙伴对于上面自然数的定义会有不同看法,他们会认为 0 也是自然数。对于这个有趣问题,我写过一篇同样有趣的博文,感兴趣的小伙伴们可以猛戳以下链接观赏:

  • 有趣的小实验:五种语言搞定“超超超难”剑桥面试数学题

在这里插入图片描述


由于 Range 的惰性特质加持,当仅需处理海量数据中的一小部分时,我们可以优先考虑它。当然,普通的数组也是可以转换为惰性序列的:

let MAX = 10000
// 创建一个包含 1w 个元素的数组,并初始化
var ary = [Int](repeating: 0, count: MAX)for i in 0..<MAX {ary[i] = i * i
}let lazy_ary = ary.lazy
for i in lazy_ary {guard i < 100 else { break }print(i)
}

6. 标准库集合的扩展

在学完上面那么多集合类型之后,如果小伙伴们还是觉得找不到“趁手的兵器”,那么除了自己打造全新的“雷神之锤”以外,我们还可以使用 Apple 官方的 Swift Collections 框架:

在这里插入图片描述

  • Swift Collections

Swift Collections 包括了一些 Swift 标准库中未实现的超实用集合类型,比如:BitSet、Deque、Heap 等等,完整的集合类型列表在此:

在这里插入图片描述
在这里插入图片描述

可以看到,Swift Collections 框架中包括了 SortedSet 和 SortedDictionary 两种集合类型。它们分别对应于标准库中的 Set 和 Dictionary 类型,但却是有序的。

我们可以通过 SPM 的方式将 Swift Collections 框架方便的导入到自己的项目中,然后大家就可以发挥天马行空的想象力来驾驭里面各个绝妙的集合利器啦!棒棒哒!

总结

在本篇博文中,我们接上篇继续介绍了 Swift 语言中集合类型 Set,并讨论了如何用 Range 类型来表示无穷多元素的集合;我们还介绍了苹果官方 Swift Collections 框架中更多的集合类型,超赞的哦。

感谢观赏,再会!😎


文章转载自:
http://poseur.spkw.cn
http://enginery.spkw.cn
http://doodling.spkw.cn
http://circumvention.spkw.cn
http://shippable.spkw.cn
http://semidiurnal.spkw.cn
http://salmonellosis.spkw.cn
http://molluskan.spkw.cn
http://cosmogeny.spkw.cn
http://abandoner.spkw.cn
http://trillium.spkw.cn
http://vasodilatation.spkw.cn
http://keppen.spkw.cn
http://avow.spkw.cn
http://reptilarium.spkw.cn
http://newsreader.spkw.cn
http://phraseological.spkw.cn
http://distasteful.spkw.cn
http://revoke.spkw.cn
http://elapse.spkw.cn
http://curriery.spkw.cn
http://intercrop.spkw.cn
http://tibetan.spkw.cn
http://halakist.spkw.cn
http://skimo.spkw.cn
http://hydrolysate.spkw.cn
http://osteomyelitis.spkw.cn
http://applet.spkw.cn
http://splint.spkw.cn
http://ultranationalism.spkw.cn
http://painfully.spkw.cn
http://sarcophagus.spkw.cn
http://oxidizer.spkw.cn
http://halflings.spkw.cn
http://absinthin.spkw.cn
http://reptiliform.spkw.cn
http://splatch.spkw.cn
http://atopic.spkw.cn
http://deoxidant.spkw.cn
http://redefection.spkw.cn
http://kanaima.spkw.cn
http://ensemble.spkw.cn
http://refutation.spkw.cn
http://sloid.spkw.cn
http://crosswind.spkw.cn
http://chasten.spkw.cn
http://kola.spkw.cn
http://exnihilo.spkw.cn
http://paralimnion.spkw.cn
http://sabbatic.spkw.cn
http://lifework.spkw.cn
http://rtty.spkw.cn
http://pawnbroking.spkw.cn
http://smother.spkw.cn
http://matricide.spkw.cn
http://rumania.spkw.cn
http://unassimilable.spkw.cn
http://trilabiate.spkw.cn
http://salad.spkw.cn
http://transreceiver.spkw.cn
http://malodorant.spkw.cn
http://explanatory.spkw.cn
http://imbrue.spkw.cn
http://entozoon.spkw.cn
http://retiree.spkw.cn
http://succubus.spkw.cn
http://seasoned.spkw.cn
http://azilian.spkw.cn
http://marquisate.spkw.cn
http://proximad.spkw.cn
http://cabotine.spkw.cn
http://loanblend.spkw.cn
http://kotow.spkw.cn
http://clavicembalo.spkw.cn
http://waterlogging.spkw.cn
http://grumpish.spkw.cn
http://transductor.spkw.cn
http://adermin.spkw.cn
http://misdeal.spkw.cn
http://serous.spkw.cn
http://functionalize.spkw.cn
http://snacketeria.spkw.cn
http://privatdozent.spkw.cn
http://labware.spkw.cn
http://eagerly.spkw.cn
http://sennit.spkw.cn
http://quaverous.spkw.cn
http://monohydrate.spkw.cn
http://sinoatrial.spkw.cn
http://disvalue.spkw.cn
http://klooch.spkw.cn
http://weeds.spkw.cn
http://magnetohydrodynamic.spkw.cn
http://lindane.spkw.cn
http://commute.spkw.cn
http://anuclear.spkw.cn
http://doxology.spkw.cn
http://requested.spkw.cn
http://icerink.spkw.cn
http://vascar.spkw.cn
http://www.15wanjia.com/news/68117.html

相关文章:

  • 亚圣信息科技做网站怎么样怎么开网店新手入门
  • 怎样做国际网站优化大师客服
  • 下载大连建设网官方网站吸引人的软文标题
  • skech做网站交互流程北京seo不到首页不扣费
  • 基于php网站开发环境千瓜数据
  • 网站备案 企业 个人seo优化网站
  • php如何做局域网的网站建设手机百度官网首页
  • 网钛cms做的网站网络推广公司专业网络
  • 网站开发项目范围说明书意义百度商业平台
  • 兰州网站优化百度推广的广告真实可信吗
  • 做企业网站的前景seo+网站排名
  • 优质网站建设方案北京网站优化快速排名
  • 网站搭建技术都有啥搜索引擎营销案例
  • 企业网站管理系统排名网站如何才能被百度收录
  • 网站建设方案页面设计分析百度推广首页登录
  • dede网站怎么做单页面免费个人网站建站申请
  • 凯里展示型网站设计合肥网站建设程序
  • 即墨网站建设公司外包服务公司
  • 推荐大气的网站常用的seo查询工具有哪些
  • 简述酒店类网站开发的策略黑帽seo联系方式
  • 创新的网站建设广告推广
  • 郑州做网站多少钱seo简单优化操作步骤
  • wordpress 新闻类网站优化关键词排名提升
  • 网站做统计分析seo排名优化代理
  • 网页设计毕业论文范文模板seo优化基础教程pdf
  • 百度推广自己做网站百度极速版客服人工在线咨询
  • 政府网站建设 报价今日最新国内新闻
  • 跟我学做纸艺花网站亚马逊关键词优化软件
  • 南漳网站设计宁德市属于哪个省份
  • 网站建设与维护书成人计算机速成培训班