一个网站开发的流程做旅行社网站多少钱

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

一个网站开发的流程,做旅行社网站多少钱,怎么查出这个网站是谁做的,中国互联网协会卢卫概览 集合的概念在任何编程语言中都占有重要的位置#xff0c;正所谓#xff1a;“古来聚散地#xff0c;宿昔长荆棘#xff1b;游人聚散中#xff0c;一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理#xff0c;怎能不让… 概览 集合的概念在任何编程语言中都占有重要的位置正所谓“古来聚散地宿昔长荆棘游人聚散中一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理怎能不让我们满心欢喜呢 在 Swift 入门学习集合Collection类型趣谈-上 这篇博文中我们已初步学习了集合的相关知识。而在下篇中我们将继续集合的探索之旅。 在本篇博文中您将学到如下内容 概览4. Set5. “无限大”的范围类型Range6. 标准库集合的扩展总结 Swift 中集合的概念简约而不简单所以让我们闲言少叙马上开始吧。 Let’s collect it now! 4. Set Set 也是一种集合类型它同样要求其内部元素都遵守 Hashable 协议 字典类似 Set 也是无序的。而且每个 Hashable 值相同的元素只能在 Set 中出现一次 与其它集合类似我们也可以方便的遍历它的元素 let set SetInt([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 Intfor 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 框架中更多的集合类型超赞的哦。 感谢观赏再会