★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(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(数组)扩展相关推荐

  1. swift Array 数组

    // //  main.Swift //  swift数组 // //  Created by zhangbiao on 14-6-15. //  Copyright (c) 2014年 理想. Al ...

  2. Swift基础——数组Array

    Swift基础--数组Array 数组:使用有序列表存储同一类型的多个值,相同值可出现在一个数组的不同位置. 数组简介 首先,和String一样我们也来看看他的一些Api方法 常规操作方法 rever ...

  3. Swift之数组去重(去除重复元素)

    在开发过程中,也许会遇到需要对数组进行去重的相关处理.如果数组内只含有基础类型的数据时,可以写两个for循环遍历,用下标取值做对比:当然也可以用集合Set(Swift),比较方便快捷. 如果需要对mo ...

  4. ES5 数组扩展方法 forEach/filter/map的使用与重写

    ES3 splice slice join sort (IE5.IE6) 数组扩展方法 ES5(在ES3的基础上增加.修正) forEach 可能会改变原数组(直接操作了arr[i],没有使用深拷贝) ...

  5. ES6/07/Array的扩展方法,...扩展运算符,Array.from(),(arr.find(),arr.findIndex()和arr.includes())模板字符串,Set数据结构

    ES6扩展的内置对象 1,Array的扩展方法 -扩展运算符(展开语法) 1,扩展运算可以的将数组或者对象转为用逗号分隔的参数序列: let ary =[1,2,3]; //-ary;//" ...

  6. Swift3 - String 字符串、Array 数组、Dictionary 字典的使用

    Swift相关知识,本随笔为 字符串.数组.字典的简单使用. ///****************************************************************** ...

  7. NSArray element failed to match the Swift Array Element type错误的解决方法

    在用swift调用yy_model生成的嵌套数组模型的时候回报错如下 错误的解决方法: Thread 1: Precondition failed: NSArray element failed to ...

  8. 4-C++ 中string类、bool类型、模板、array数组、vector向量的基础知识

    目录 继续C++ ------3 ++操作符的友元函数重载 ++操作符的成员函数重载 赋值运算符重载 类型转换运算符 运算符重载注意事项 string类 bool类型的练习 模板 1.函数模板 2.类 ...

  9. JavaScript引用类型之Array数组之强大的splice()方法

    splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...

  10. 列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)...

    一.列表(list) 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号"[]"包围的数据集合,不同成员以","分隔. 列表中可以包含任何数据 ...

最新文章

  1. sklearn.preprocessing下的数据标准化(scale、MinMaxScaler)
  2. php-fpm backlog 项的调整
  3. xmm1是什么器件_数字电路实验指导书
  4. c语言 sizeof_c语言详解sizeof
  5. 继续分享 5 个实用的 vs 调试技巧
  6. word2vec训练词向量 python_使用Gensim word2vector训练词向量
  7. 工作流实战_06_flowable 流程定义的删除
  8. python如何连接mysql数据库
  9. CNN反向传播算法过程
  10. 《构建高性能Web站点》观后感
  11. Win11怎么查看设备管理器?Win11设备管理器在哪里打开?
  12. 【优化预测】基于matlab粒子群算法优化DBN预测【含Matlab源码 1420期】
  13. 计算机libeay32.dll丢失怎么办,电脑libeay32.dll丢失的解决方法
  14. *(绝对可以安装成功的HUAWEI eNSP模拟器)计算机网络实验(华为eNSP模拟器)——第一章 华为eNSP安装教程
  15. android日记app常用,只是意外 - 用这些 APP 来记录生活,再也不用担心无法坚持写日记 - Android 应用 - 【最美应用】...
  16. oracle 信用检查,Oracle EBS 信用(Credit)额度(1)
  17. 初中计算机考试wps文字,初中信息技术WPS表格测试题.docx
  18. 没有技术含量,但能每天赚50刀的GGAD赚钱办法分享
  19. 主从复制:主从复制的概述、一主一从架构搭建主从复制的原理、同步数据一致性问题
  20. 一些优秀的小工具,快速帮助我们办公!

热门文章

  1. 圆柱体积怎么算立方公式_祖暅原理和球的体积公式
  2. qq 音乐 python 登录_手把手教你使用Python抓取QQ音乐数据(第四弹)
  3. 电脑用电量_为什么换了智能电表后,我家用电量一下子多了这么多呢?
  4. 【2019杭电多校第五场1005=HDU6628】permutation 1(全排列+预处理+思维)
  5. 【2019西安邀请赛热身赛C:】python算数表达式求值+模拟int溢出
  6. 【UVA10129】Play on Words(欧拉回路+有向图连通性判断+打印欧拉道路)
  7. oracle查询语句转sql,将sql server查询语句转换为oracle查询语句[紧急]
  8. C/C++[codeup 2064]编排字符串
  9. 价值连城 神经网络- 吴恩达Andrew Ng Coursera Neural Networks and Deep Learning
  10. 易筋SpringBoot 2.1 | 第廿篇:SpringBoot的复杂JPA以及源码解析