Swift中常见的String用法,Array高阶使用,Set集合操作

String字符串常见用法 生成字符串
创建字符串
let greeting = "Hello, world!"
let name = String("John")

连接字符串:使用加号(+)或者字符串插值(使用())来将多个字符串连接起来。
var firstName = "John"
let lastName = "Doe"
let fullName = firstName + " " + lastName // "John Doe"
let fullName1 = firstName.append(lastName) // "My name is John Doe."
let message = "My name is \(fullName)." // "My name is John Doe."
子字符串查询,替换,插入,删除
查找子字符串
let sentence = "Swift is a powerful and intuitive programming language."
if sentence.contains("Swift") {
    // do something
}
let range = sentence.range(of: "powerful") // Optional(Range(10..<18))
var str3 = "123456"
print(str.hasPrefix("123"))
print(str.hasSuffix("456"))

替换字符串
var sentence = "Swift is a powerful and intuitive programming language."
sentence = sentence.replacingOccurrences(of: "powerful", with: "amazing")

字符串删除
// 666hello_2_3_8884
str4.remove(at: str4.firstIndex(of: "1")!)
// hello_2_3_8884
str4.removeAll { $0 == "6" }
var range = str4.index(str4.endIndex, offsetBy: -4)..<str4.index(before: str4.endIndex)
// hello_2_3_4
str4.removeSubrange(range)

字符串插入
var str = "Hello, world!"
let firstChar = str[str.startIndex] // "H"
let lastChar = str[str.index(before: str.endIndex)] // "!"
str.insert("!", at: str.endIndex) // "Hello, world!!"
字符串转数组
字符串分割
let names = "John, Jane, Jim"
let arr = names.components(separatedBy: ", ") // ["John", "Jane", "Jim"]
字符串转其他
let str = "123"
let num = Int(str) // Optional(123)
let uppercased = str.uppercased() // "123"

 

Array数组高阶操作 map:对给定数组每个元素,执行闭包中的映射,将映射结果放置在数组中返回。 flatMap:对给定数组的每个元素,执行闭包中的映射,对映射结果进行合并操作,然后将合并操作后的结果放置在数组中返回。 compactMap:对给定数组的每个元素,执行闭包中的映射,将非空的映射结果放置在数组中返回。 compactMap:对给定数组的每个元素,执行闭包中的映射,将非空的映射结果-键值对放置在字典中返回。 filter:对给定数组的每个元素,执行闭包中的操作,将符合条件的元素放在数组中返回。 reduce:对给定数组的每个元素,执行闭包中的操作对元素进行合并,并将合并结果返回。
var arr = [1, 2, 3, 4]
// [2, 4, 6, 8]
var arr2 = arr.map { $0 * 2 }
print(arr2)
// [2, 4]
var arr3 = arr.filter { $0 % 2 == 0 }
print(arr3)
// 10
var arr4 = arr.reduce(0) { $0 + $1 }
print(arr4)
// 10
var arr5 = arr.reduce(0, +)
print(arr5)

 

Set集合操作 集合创建
let setA = Set(["a","b","c"])
let setB: Set = ["a","b","c"]
增删改查
setA.contains("a")
setA.insert("c")
setA.remove("a")
集合运算
let set1 = Set([1,2,3])
let set2 = Set([1,2])

//运算判断
if set1 == set2 {
    
}
// 子集,超集判断
set2.isSubset(of: set1)
set1.isSuperset(of: set2)

// 并集,交集
set1.union(set2)
set1.intersection(set2)

 

 

 

本文转载于网络 如有侵权请联系删除

相关文章

  • Cell Systems: 微生物数据快速推断直接互作的方法FlashWeave

    Journal:CellSystemsIF:10.3Published:September2019Link:https://www.sciencedirect.com/science/article/pii/S2405471219302716#bib2使用:https://github.com/meringlab/FlashWeave.jl摘要FlashWeave是一种基于灵活的概率图形模型框架(ProbabilisticGraphicalModelframework)的计算方法,可从数十万个样本微生物丰度数据集预测直接的微生物相互作用。FlashWeave在运行时间和准确性方面都优于最先进一些其他方法。使用FlashWeave分析了69818个公开可用的人类肠道样本数据集,并产生了迄今为止规模最大、最多样肠道微生物相互作用网络。概率图形模型(probabilisticgraphicalmodels,PGMs)考虑微生物之间的条件依赖结构来区分直接联系和间接联系。例如,间接(或虚假)联系可能由物种相互间接作用(即两个物种之间通过其他中介物种传递的相互作用)或生态位和批次效应驱动。PGM

  • Bugless 异常监控系统 (iOS端)

    一、引言移动App发布后,如果想获取App的业务运行状态,通常是通过服务端接口反映到状态或者是用户反馈,缺少客户端的异常错误的线上监控、告警与异常数据聚合并沉淀的平台。也无法在多维度进行异常数据的对比,使得收集应用信息和收集崩溃日志变得日益迫切。37手游研发的Bugless定位于从线上问题追踪的视角出发,检测代码异常,通过回溯问题,从而解决代码本身问题。它的主要功能:实时监控SDK业务异常汇总包体崩溃排重与聚合后的数据统计影响设备数上报崩溃日志收集iOS系统向上兼容性问题监控客户端请求的网络问题<!--more-->Bugless目标定位是,支持不同项目不同端的异常上报告警,智能推送通知,及时发现异常,尽最快速度降低影响时间和范围,减少造成的损失。同时Bugless也支持后台聚合错误信息数据,分析历史异常数据,协助开发人员对项目进行实现监控和产品迭代优化。二、认识崩溃和异常在讲解Bugless之前,让我们从三个层面来介绍,让大家认识App为什么会出现崩溃和异常,以及如何应对。2.1、App层面App出现崩溃(crash)原因,是因为违反iOS系统运行规则导致的,产生cras

  • 支撑性服务 & 自动化能力

    Backingservices云原生系统依赖于许多不同的辅助资源,例如数据存储、消息队列、监视和身份服务,这些服务统称为支撑性服务。下图显示了云原生系统使用的常见支撑性服务支撑性服务帮助实现了“十二要素应用”中的Statelessness原则要素6提到:“每个微服务应在独立隔离的进程中执行,将所需状态信息作为外部支撑性服务,例如分布式缓存或数据存储”最佳实践是将支撑性服务视为附加资源,并使用外部挂载的方式将配置(URL和凭据)动态绑定到微服务。要素4指出:“支撑性服务“应通过可寻址的URL公开,这样做解耦了将资源与应用” 要素3指出:“将配置信息从微服务中移出并外挂”Stateless和支撑性服务,这样松散的设计使你可以将一项支撑性服务换成另一项支撑性服务,或将代码移至其他公有云,而无需更改主线服务代码。支撑性服务将在第5章“云原生数据模式”和第4章“云原生通信模式”中详细讨论。自动化如你所见,云原生依赖(微服务、容器和现代设计理念)来实现速度和敏捷性。 但是,你如何配置运行这些系统的云环境?你如何快速部署应用程序功能和更新?被广泛认可的作法是基础设施即代码(IaC)借助IaC,你可以

  • dpdk结合sriov测试vpp ipsec性能

    目的测试vppipsec转发性能,想当作openstackVPNaas的一种driver,提高ipsec网关的转发能力。环境测试资源很有限,没有测试仪,物理机之外的交换机不受控制。只有两台物理机,各有一张测试网卡,网卡有两个10G口,可能确定的是两台物理机一个10G口之间联到同一个TOR交换机可能互通,另一对10G口之间测试不通。想法就是vpp两个口,一个口当作网关,另一个口用来做tunnel。vpp版本是mastercommit6e39ff03a6fa28a2655d767454394413252a269d,早期版本ipsec有bug.vpp用到了dpdk,需要先创建hugepage和网卡绑定igb_uio,不再特殊强调。第一种方法创建一对vethpair,一个放在namespace中,一个放在vpp上当hostinterface。机器1上操作:#服务器1配置 ipnetnsaddns0 iplinkaddvpp0typevethpeernamehost_vpp0 iplinksetvpp0up iplinksethost_vpp0netnsns0 ipnetnsexecns0i

  • js中arguments的使用

    2017-08-0902:46:18在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。可以通过下面的例子来看一下arguments的具体使用方法functiontest(){ if(arguments.length>0){ for(pofarguments){ console.log(p); } } } test("a","sdf","段落"); //输出结果为asdf段落复制arguments.callee引用函数自身的意

  • 怎么使用icheck美化CheckBox多选框

    一直写checkbox觉得很丑(简称CB),毕竟自带的CB是很丑的,没有做任何的美化的,于是觉得不甘,找了很久找到了一个插件,是可以美化CB的,好东西就要大家分享,所以今天简单的写一个使用教程:html<body> <inputtype='checkbox'name='cate[]'value='102'οnclick="check();"><label>vue</label> <inputtype='checkbox'name='cate[]'value='102'οnclick="check();"><label>boostrap</label> <inputtype='checkbox'name='cate[]'value='102'οnclick=&

  • vue上拉加载更多组件

    我想,工作一段时间的都碰见过上拉加载更多需求,现在这种插件也蛮多的,也很多是把上拉加载下拉刷新结合。但是这些组件都有一个问题,就是下拉到最底部,刷新浏览器,浏览器会记住这个距离,从而触发上拉加载的方法。虽然这个小问题在正常情况下没什么影响,于是自己就研究研究,写了一个上拉加载更多的组件。要写上拉加载其实还分两种场景,一种是相对window,也就是相对于可视窗口,一种是在一个容器内。大部分使用场景是相对窗口,所以暂时只写了一个相对于window的。上拉加载原理简单来说就是判断内容是否到达底部。容器自身的高度加上距离顶部的距离就是现在整个页面的高度。整个页面的高度减去可视窗口的高度再减去滚动条移动的距离,当接近0的时候就是到达底部的时候。明白了这个原理上拉加载就很好实现了。标签:<divid="scroll"><slot></slot></div>复制这边使用了vue的slot插槽。data:windowHeight:'',contentOffSetHeight:'',downT:&

  • JVM宏观认知&&内存结构

    JVM宏观认知1.什么是虚拟机?虚拟机是一种软件。可分为系统虚拟机(仿真物理机)和程序虚拟机(执行单个计算机程序,比如JVM)。2.什么是Java虚拟机(JVM)?JVM是一种将字节码转化为机器码的软件。(同上)历经时间的迭代,目前广泛应用的Java虚拟机是Oracle的HotSpotVM。3.JVM有什么用?理论:加深对Java底层运行机制的了解和认知实践:自定义性能更强的JVM(参数调优),排查由于Java应用本身导致的线上问题(调优主要是调堆)JDK的发布版本了解一下1991.4:Java语言前身Oak诞生1995.5:Oak语言改名为Java1996.1:JDK1.0发布,代表技术包括JVM,Applet,AWTApplet是一种Java程序,需要嵌入在HTML中解释执行AWT是早期的抽象窗口工具包,目前流行的有Swing,JavaFx1997.2:JDK1.1发布,代表技术有JAR文件格式,JDBC,内部类,反射2002.2:JDK1.4发布,新的技术有正则表达式,NIO,日志类正则表达式是对字符串操作的一种逻辑格式NIO在IO的基础上增加了缓冲区,是一种非阻塞式的IO模型2

  • Leetcode 599. Minimum Index Sum of Two Lists

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢!https://blog.csdn.net/Quincuntial/article/details/83450109文章作者:Tyan 博客:noahsnail.com|CSDN|简书1.Description2.SolutionclassSolution{ public: vector<string>findRestaurant(vector<string>&list1,vector<string>&list2){ intmin=INT_MAX; vector<string>result; unordered_map<string,int>m; for(inti=0;i<list1.size();i++){ m[list1[i]]=i; } for(inti=0;i<list2.size();i++){ if(m.find(list2[i])!=m.end()){ intindex=m[list2[i]]+i; if(index<m

  • Expected indentation of 10 spaces but found 20

    遇到过两次这个问题,第一次是用vue做商城时,第二次是做mpvue项目时,这是因为安装vue-cli时,直接安装了ESLint。一.在vue项目下找到build文件下的webpack.base.conf.js-->module,关闭...(config.dev.useEslint?[createLintingRule()]:[])复制二.在mpvue项目下关闭ESLint找到build文件下的webpack.base.conf.js--->module 注释掉红框里面的就OK!

  • 【BAT面试必会】如何在10亿数中找出前1000大的数

    【面试现场】题目:如何在10亿数中找出前1000大的数?小史:我可以用分治法,这有点类似快排中partition的操作。随机选一个数t,然后对整个数组进行partition,会得到两部分,前一部分的数都大于t,后一部分的数都小于t。小史:如果说前一部分总数大于1000个,那就继续在前一部分进行partition寻找。如果前一部分的数小于1000个,那就在后一部分再进行partition,寻找剩下的数。小史:首先,partition的过程,时间是o(n)。我们在进行第一次partition的时候需要花费n,第二次partition的时候,数据量减半了,所以只要花费n/2,同理第三次的时候只要花费n/4,以此类推。而n+n/2+n/4+...显然是小于2n的,所以这个方法的渐进时间只有o(n)(注:这里的时间复杂度计算只是简化计算版,真正严谨的数学证明可以参考算法导论相关分析。)半分钟过去了。小史一时慌了神。他回忆起了之前吕老师给他讲解bitmap时的一些细节。突然有了一个想法。小史在纸上画了画。理解了算法之后,小史的代码写起来也是非常快,不一会儿就写好了:TopN.java/** *@a

  • 最常用的经典数据结构和算法汇总

    朋友写的一些算法和数据结构文章,我觉得写得非常不错,给大家推荐一下! 作者:倪升武公众号来源:程序员私房菜 如果说数据结构是骨架,那么算法就是灵魂。没了骨架,灵魂没有实体寄托;没了灵魂,骨架也是个空壳。两者相辅相成,缺一不可,在开发中起到了砥柱中流的作用。前面我连载了一些比较经典而且面试中经常出现的数据结构和算法文章,其实除了面试中经常出现以外,做开发的,对这些内功的掌握也是必须的,虽然说现在大部分大数据结构已经有实现了,但是,招式只是形式,想练神功,必须懂心法。这篇文章,我把之前我连载的数据结构和算法文章整合在一起,然后对各种数据结构和算法做一总结,对比一下它们的效率,本文值得大家转发和收藏!数据结构篇1.如果让你手写个栈和队列,你还会写吗? 2.开发了那么多项目,你能自己手写个健壮的链表出来吗? 3.下次面试若再被问到二叉树,希望你能对答如流!4.面试还在被红-黑树虐?看完这篇轻松搞定面试官! 5.2-3-4树是如何解决二叉树中非平衡问题的? 6.读完这篇,希望你能真正理解什么是哈希表 7.堆其实是个很简单的数据结构 8.我敢说,这图绝对跟你想象中的不太一样! 9.图也有权重,你

  • 人工智能在围棋上击败人类后,又要挑战赛车了

    日前,英伟达在GTC大会上公布新一代显卡TeslaP100的时候,顺便宣布两样新产品:其一是需要大量GPU运算加持的人工智能深度学习服务器;另一个则是一辆无人驾驶的类F1外形赛车——自然,这辆车里装备了英伟达基于新显卡的无人驾驶行车电脑DrivePX2。英伟达CEO黄仁勋在发布会上表示,这种无人驾驶赛车将会应用在今年即将举行的无人驾驶赛车赛事Roborace当中。你没听错,人工智能在围棋上击败人类之后,今年又要挑战赛车运动了。不过这项名为Roborace的赛事并不打算让人工智能和人类车手同场竞技。相反,主办方的想法是在限定赛车的硬件水平后,让不同参赛队伍比拼人工智能算法。如果没有大的变动,你很有可能在北京就能看到无人驾驶赛车的方程式比赛,而且说不定还能成为世界上的见证无人赛车的第一批观众。主办方公布的无人驾驶赛车,纯电驱动,没有任何改造余地。其实无人驾驶赛车比赛不算是新闻,去年年底,国际汽联设立的电动方程式大奖赛(FormulaE,以下简称“FE大奖赛”)就已经决定要在人类驾驶的电动方程式赛事之外,单独开发出来一套名为“Roborace”的无人驾驶系列赛。虽然以今天应用在赛车上的科技来

  • Nginx模块之Upstream解析

    Nginx模块一般被分成三大类:handler、filter和upstream。前面的文章系列中,读者已经了解了handler、filter。利用这两类模块,可以使nginx轻松完成任何单机工作。而本文介绍的upstream模块,将使nginx跨越单机的限制,完成网络数据的接收、处理和转发。数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发是nginx有能力构建一个网络应用的关键组件。当然,鉴于开发成本的问题,一个网络应用的关键组件一开始往往会采用高级编程语言开发。但是当系统到达一定规模,并且需要更重视性能的时候,为了达到所要求的性能目标,高级语言开发出的组件必须进行结构化修改。此时,对于修改代价而言,nginx的upstream模块呈现出极大的吸引力,因为它天生就快。作为附带,nginx的配置系统提供的层次化和松耦合使得系统的扩展性也达到比较高的程度。言归正传,下面介绍upstream的写法。upstream模块接口从本质上说,upstream

  • Java反应式编程(1)

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   前面把Java函数式编程的由来和最主要的核心知识点讲完了。包括比较难懂的Lambda表达式是怎么演变而来的也全部都撸了一遍。Lambda表达式这种编程方式的确是让人不太习惯,尤其是之前那种纯面向对象编程的思维模式一旦建立起来之后,想要再接受这种比较奇怪的语法和编程模式,确实是非常困难。但Lambda表达式和流式编程的出现,又催生了另一门新的技术:反应式编程。 《三国演义》中说:“天下大势,分久必合,合久必分”。在科技领域也是一样。之前没有科学的时候,由占星术、炼金术、神学等催生出了一系列的自然科学,像什么物理、化学、数学等等。等到这些学科演变的差不多了之后,又开始了逐步的融合。 反应式编程就和这有点类似,它是融合了Lambda表达式、流式编程和观察者模式的一种新的编程范式。 就像很多反应式编程的技术书、官网和资料里面说的,“一切皆是流”,比如我们其实无时不刻都在呼吸对吧,而且吸入和呼出的都是空气,也就是气流,这个很好理解哈~然后我们的嘴巴会去吃东西,就是食物吧,它也会变成食物流,其他的也是一样,像我们看到的外部的风景

  • (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇

    本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ?由我开源的先进Dash组件库feffery-antd-components正处于早期测试版本阶段,欢迎前往官网http://fac.feffery.tech/了解更多 1简介   这是我的新系列教程Python+Dash快速web应用开发的第一期,我们都清楚学习一个新工具需要一定的动力,那么为什么我要专门为Dash制作一个系列教程呢? 图1   Dash是一个高效简洁的Python框架,建立在Flask、Poltly.js以及React.js的基础上,设计之初是为了帮助前端知识匮乏的数据分析人员,以纯Python编程的方式快速开发出交互式的数据可视化web应用。   Dash已经过数年的迭代发展,早期的Dash我也体验过,但当时还比较简陋,很多问题亟待解决,因此并没有引起我的多大注意。   但随着近一两年的高速发展和积极更新迭代,现阶段的Dash已经是一个相当成熟的框架,且其功能已经丰富到不仅仅可以用来开发在线数据可视化作品,即使

  • 为什么Base64转码后,会比原文件大?

    rt:众所周知图片base64存储文件大小会比原文件大为什么会这样呢?     因为二进制补零了,6位变8位,总字节长度当然就膨胀了。   showtooltip

  • 【JS】ES6-let、const定义变量

    <!doctypehtml> <htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"> <metahttp-equiv="X-UA-Compatible"content="ie=edge"> <title>Document</title> </head> <body> <script> //定义变量 //1.欲解析 console.log(num) varnum=100 console.log(num) //定义之前使用let声明的变量会报错 //console.log(num2) //letnum2=100 //console.log(num2) //定义之前使用const声明的变量

  • 3年程序员感慨,为什么今年面试这么难?

    最近后台读者说自己最近在疯狂投简历,有的石沉大海,但还好不是全军覆没。前两天好不容易熬到了阿里的四面,跟我聊了一下,面试官拿哪些题为难了他?前面几题还好,问的是有关JVM的一些问题,比如说JVM主要组成部分及其作用?运行时数据区包含哪些?这里基本都还能hold住,但越到后面,他问到jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代等?g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择?说一说你对环境变量classpath的理解?如果一个类不在classpath下,为什么会抛出ClassNotFoundException异常,如果在不改变这个类路径的前期下,怎样才能正确加载这个类?......他说一瞬间脑子里只剩下嗡嗡声事实上,就我这些年的面试经验而言,有很多年工作经验但是和技术能力匹配不上的人是存在的。如果在简历上看到应聘者最近几年的时间使用的技术、开发的项目几乎和头几年差不多,那么也就可以猜测这些年他的技术成长空间是有点狭窄了。还有个现实的原因就是工作中过于依赖CV大法,导致代码基础不扎实。很多简单工作的实现依赖百度,动手能力没有变得更强。而不论

  • idea中git回滚

    回滚步骤: 1、选择你要回滚的提交记录resetcurrentbranchtohere选择hard   2、选择最新的提交记录resetcurrentbranchtohere选择mixed   3、commitpush完成回滚  看一下,远端仓库同步成功:   本文来自博客园,作者:紫英626,转载请注明原文链接:https://www.cnblogs.com/recorderM/p/16047838.html

  • 子序列问题【LIS、LCS、LCIS】

      最长上升子序列【LIS】 Input 1413791638243718441921226315 Output max=879161819212263  光求长度很容易,但记录路径就麻烦了(至少我想一下午没想出来) 解析: 记录长度很容易,从前往后扫一遍,记录每次1~i的最大长度 于此同时,另开一个数组结构体,(或一个二维数组)记录路径,为了复制方便,推荐用结构体哦 #include<stdio.h> #include<algorithm> usingnamespacestd; structqu{ intl[101]; }line[101]; inta[101],f[101]; intmain() { intn,aim,ans=1; scanf("%d",&n); for(inti=1;i<=n;++i) scanf("%d",&a[i]); for(inti=1;i<=n;++i) { f[i]=1; line[i].l[1]=a[i]; for(intj=1;j<i;++j) { if(a[

相关推荐

推荐阅读