[Swift]Array(数组)扩展

摘要:
原文已修改和更新!强烈建议点击原始地址阅读!★★★★★★★★★★★★★★★★★★★★★★★★★★★ 展开Array1extensionArraywhereElement:Equalable{2//获取数组中指定元素的索引值3/Parameteritem:element 4//返回:索引值数组5publicfncindexes-˃[Int]{6variandexes=[Int]()7forindexin0...<countwhereself[index]==item{8indexs.append9}10returnindexs11}1213//获取元素的第一个出现位置14//Parameteritem:element 15//返回:index值16public_funcfirstIndex-˃Int?

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(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]

免责声明:文章转载自《[Swift]Array(数组)扩展》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇H3C 交换机VRRP和堆叠彻底理解Java的feature模式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

bootstrap分页插件--Bootstrap Paginator的使用&amp;amp;AJAX版备份(可单独使用)

html部分: <ul class="pagination"></ul> <!--bootstrap3版本用ul包裹--> <div class="pagination"></div><!--bootstrap2版本用div包裹--> 刷新页面版Boo...

Dom4j总结

1、DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。 DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。 Dom:把整个文档作为一个对象。 DOM4J 最大的特色是使用大量的接口。它的主要接口...

标准C程序设计七---33

Linux应用 编程深入 语言编程标准C程序设计七---经典C11程序设计以下内容为阅读:《标准C程序设计》(第7版) 作者:E. Balagurusamy(印), 李周芳译 清华大学出版社 2017.7《21天学通C语言》(第7版) 作者:Bradley Jones Peter Aitken Dean Miller(美), 姜佑译 人民邮电出版社 201...

Yii2基本概念之——配置(Configurations)

在Yii中创建新对象或者初始化已经存在的对象广泛的使用配置,配置通常包含被创建对象的类名和一组将要赋值给对象的属性的初始值,这里的属性是Yii2的属性。还可以在对象的事件上绑定事件处理器,或者将行为附加到对象上。从而在定义了对象的初始值的同时,充分规定对象的运行时的动态特性。 以下代码中的配置被用来创建并初始化一个数据库连接: $config = [...

js和java中使用join来进行数组元素的连接

  合理地使用join来进行数组中元素的连接,代码简洁,比自己编码也更为方便。   js中join的用法 var arr = new Array(3) arr[0] = "a" arr[1] = "b" arr[2] = "c" arr.join(".") a.b.c ------------------ arr.join(",") a,b,c   ja...

【转好文】c程序员学习perl

给C程序员的提示 Perl结合了多种编程语言的特性,C语言也在其中。Perl和C有以下相同之处: ·1.分号是每个简单语句必需的,换行不能表示语句结束。 ·2.数组下标也是从0开始,Perl中像substr这样的字符串函数也是从0开始计算位置的。 ·3.逗号操作符的作用一样。 ·4.&&和||操作符作用一样。然而,Perl和C毕竟是两...