[Swift]Array(数组)扩展
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10403543.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
扩展Array
1 extension Array where Element : Equatable { 2 //获取数组中的指定元素的索引值 3 //Parameter item: 元素 4 //Returns: 索引值数组 5 public func indexes(_ item: Element) -> [Int] { 6 var indexes = [Int]() 7 for index in 0..<count where self[index] == item { 8 indexes.append(index) 9 } 10 return indexes 11 } 12 13 //获取元素首次出现的位置 14 //Parameter item: 元素 15 //Returns: 索引值 16 public func firstIndex(_ item: Element) -> Int? { 17 for (index, value) in lazy.enumerated() where value == item { 18 return index 19 } 20 return nil 21 } 22 23 //获取元素最后出现的位置 24 //Parameter item: 元素 25 //Returns: 索引值 26 public func lastIndex(_ item: Element) -> Int? { 27 return indexes(item).last 28 } 29 30 //删除数组中的指定元素 31 //Parameter object: 元素 32 public mutating func remove(_ object:Element) -> Void { 33 for idx in self.indexes(object).reversed() { 34 self.remove(at: idx) 35 } 36 } 37 }
测试代码:
1 var arr:[Int] = [1,2,3,4,5,5,6,7,7,8,9,10] 2 print(arr.firstIndex(5)) 3 //Prnt Optional(4) 4 print(arr.lastIndex(7)) 5 //Prnt Optional(8) 6 arr.remove(7) 7 print(arr) 8 //Prnt [1, 2, 3, 4, 5, 5, 6, 8, 9, 10]
扩展数组,二分法插入:
1 private extension Array where Element: Comparable { 2 private func binarySearchIndex(for element: Element) -> Int { 3 var min = 0 4 var max = count 5 while min < max { 6 let index = (min+max)/2 7 let other = self[index] 8 if other == element { 9 return index 10 } else if other < element { 11 min = index+1 12 } else { 13 max = index 14 } 15 } 16 return min 17 } 18 19 mutating func binaryInsert(_ element: Element) { 20 insert(element, at: binarySearchIndex(for: element)) 21 } 22 }
测试代码:
1 var arr:[Int] = [1,2,3,4,5,6,7,8,9] 2 arr.binaryInsert(5) 3 print(arr) 4 //Print [1, 2, 3, 4, 5, 5, 6, 7, 8, 9]
转载于:https://www.cnblogs.com/strengthen/p/10403543.html
[Swift]Array(数组)扩展相关推荐
- swift Array 数组
// // main.Swift // swift数组 // // Created by zhangbiao on 14-6-15. // Copyright (c) 2014年 理想. Al ...
- Swift基础——数组Array
Swift基础--数组Array 数组:使用有序列表存储同一类型的多个值,相同值可出现在一个数组的不同位置. 数组简介 首先,和String一样我们也来看看他的一些Api方法 常规操作方法 rever ...
- Swift之数组去重(去除重复元素)
在开发过程中,也许会遇到需要对数组进行去重的相关处理.如果数组内只含有基础类型的数据时,可以写两个for循环遍历,用下标取值做对比:当然也可以用集合Set(Swift),比较方便快捷. 如果需要对mo ...
- ES5 数组扩展方法 forEach/filter/map的使用与重写
ES3 splice slice join sort (IE5.IE6) 数组扩展方法 ES5(在ES3的基础上增加.修正) forEach 可能会改变原数组(直接操作了arr[i],没有使用深拷贝) ...
- ES6/07/Array的扩展方法,...扩展运算符,Array.from(),(arr.find(),arr.findIndex()和arr.includes())模板字符串,Set数据结构
ES6扩展的内置对象 1,Array的扩展方法 -扩展运算符(展开语法) 1,扩展运算可以的将数组或者对象转为用逗号分隔的参数序列: let ary =[1,2,3]; //-ary;//" ...
- Swift3 - String 字符串、Array 数组、Dictionary 字典的使用
Swift相关知识,本随笔为 字符串.数组.字典的简单使用. ///****************************************************************** ...
- NSArray element failed to match the Swift Array Element type错误的解决方法
在用swift调用yy_model生成的嵌套数组模型的时候回报错如下 错误的解决方法: Thread 1: Precondition failed: NSArray element failed to ...
- 4-C++ 中string类、bool类型、模板、array数组、vector向量的基础知识
目录 继续C++ ------3 ++操作符的友元函数重载 ++操作符的成员函数重载 赋值运算符重载 类型转换运算符 运算符重载注意事项 string类 bool类型的练习 模板 1.函数模板 2.类 ...
- JavaScript引用类型之Array数组之强大的splice()方法
splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...
- 列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)...
一.列表(list) 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号"[]"包围的数据集合,不同成员以","分隔. 列表中可以包含任何数据 ...
最新文章
- sklearn.preprocessing下的数据标准化(scale、MinMaxScaler)
- php-fpm backlog 项的调整
- xmm1是什么器件_数字电路实验指导书
- c语言 sizeof_c语言详解sizeof
- 继续分享 5 个实用的 vs 调试技巧
- word2vec训练词向量 python_使用Gensim word2vector训练词向量
- 工作流实战_06_flowable 流程定义的删除
- python如何连接mysql数据库
- CNN反向传播算法过程
- 《构建高性能Web站点》观后感
- Win11怎么查看设备管理器?Win11设备管理器在哪里打开?
- 【优化预测】基于matlab粒子群算法优化DBN预测【含Matlab源码 1420期】
- 计算机libeay32.dll丢失怎么办,电脑libeay32.dll丢失的解决方法
- *(绝对可以安装成功的HUAWEI eNSP模拟器)计算机网络实验(华为eNSP模拟器)——第一章 华为eNSP安装教程
- android日记app常用,只是意外 - 用这些 APP 来记录生活,再也不用担心无法坚持写日记 - Android 应用 - 【最美应用】...
- oracle 信用检查,Oracle EBS 信用(Credit)额度(1)
- 初中计算机考试wps文字,初中信息技术WPS表格测试题.docx
- 没有技术含量,但能每天赚50刀的GGAD赚钱办法分享
- 主从复制:主从复制的概述、一主一从架构搭建主从复制的原理、同步数据一致性问题
- 一些优秀的小工具,快速帮助我们办公!
热门文章
- 圆柱体积怎么算立方公式_祖暅原理和球的体积公式
- qq 音乐 python 登录_手把手教你使用Python抓取QQ音乐数据(第四弹)
- 电脑用电量_为什么换了智能电表后,我家用电量一下子多了这么多呢?
- 【2019杭电多校第五场1005=HDU6628】permutation 1(全排列+预处理+思维)
- 【2019西安邀请赛热身赛C:】python算数表达式求值+模拟int溢出
- 【UVA10129】Play on Words(欧拉回路+有向图连通性判断+打印欧拉道路)
- oracle查询语句转sql,将sql server查询语句转换为oracle查询语句[紧急]
- C/C++[codeup 2064]编排字符串
- 价值连城 神经网络- 吴恩达Andrew Ng Coursera Neural Networks and Deep Learning
- 易筋SpringBoot 2.1 | 第廿篇:SpringBoot的复杂JPA以及源码解析