随着Google大力推行Flutter,Dart语言变得越来越流行。在移动跨端开发方面,Flutter有着很好的优势,无论性能还是跨平台移植方面。Dart语言是强类型语言,语法上跟JS和Java非常像。下面以数组去重算法为例来展示下Dart语言的特性。
数组去重复的基本概念
从一个数组列表中,去掉重复的项,保证该列表中的各项都是独一无二的。比如[1,2,2,3,4,5,4,5]要变成[1,2,3,4,5]。
算法实现的基本思路
基本的思路是,遍历数组中的每一项,并将当前项与其他剩余项逐个进行比较,遇到相同则移除掉当前项,依次删除全部重复的项目。以下按照循环遍历、数据结构、先排序再去重、递归等几种方式分别来说下实现的方式。
循环遍历删除重复项
以上方式,主要是通过双层循环来逐个与其他项目对比,然后移除重复项。从以上可以看出dart与js代码几乎一致,可以用var定义变量,循环与判断等几乎一样,函数也无需指定返回类型。相比于java,dart也是强类型语言,只不过可以定义dynamic动态类型。
添加非重复项到新数组
以上方式新建了一个数组来存放不重复项,也就是拿每一项跟新数组里的项去比较,如果不存在重复就添加到新数组中。这种方式很好理解,不足就是开辟了一个新数组空间。以上代码写法上与js几乎一致。
利用数据结构特性来去重
以上是利用数据结构中set不允许重复项的特点来达到去重复的目的,与算法无关了,非常简单好用。map的key值是唯一的,因此也可以利用这个原理来实现去重复。
先排序再去重复
这里利用的是将数组先排好序,然后再挨个比较去掉重复项。也可以利用reduce来比较前后项,reduce函数主要用于集合中元素依次归纳(