• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Swift]Array(数组)扩展

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10403543.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

扩展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]

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode36. 有效的数独 | Valid Sudoku发布时间:2022-07-13
下一篇:
手动导入swift三方danielgindi/Charts到OC工程中教程发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap