对比分析:Flutter Dart数组去重的多种方法

发表时间: 2022-01-27 20:26

随着Google大力推行Flutter,Dart语言变得越来越流行。在移动跨端开发方面,Flutter有着很好的优势,无论性能还是跨平台移植方面。Dart语言是强类型语言,语法上跟JS和Java非常像。下面以数组去重算法为例来展示下Dart语言的特性。



数组去重复的基本概念

从一个数组列表中,去掉重复的项,保证该列表中的各项都是独一无二的。比如[1,2,2,3,4,5,4,5]要变成[1,2,3,4,5]

算法实现的基本思路

遍历数组中的每一项,并将当前项与其他剩余项逐个进行比较,遇到相同则移除掉当前项,依次删除全部重复的项目。以下按照循环遍历、数据结构、先排序再去重、递归等几种方式分别来说下实现的方式。

  • 循环遍历删除重复项

数组去重方式1

数组去重方式2

以上方式,主要是通过双层循环来逐个与其他项目对比,然后移除重复项。从以上可以看出dart与js代码几乎一致,可以用var定义变量, 循环与判断等几乎一样,函数也无需指定返回类型。相比于java,dart也是强类型语言,只不过可以定义dynamic动态类型。

  • 添加非重复项到新数组

数组去重方式3

数组去重方式4

数组去重方式5

数组去重方式6

数组去重方式7

数组去重方式8

数组去重方式9

以上方式新建了一个数组来存放不重复项,也就是拿每一项跟新数组里的项去比较,如果不存在重复就添加到新数组中。这种方式很好理解,不足就是开辟了一个新数组空间。以上代码写法上与js几乎一致。

  • 利用数据结构特性来去重

数组去重方式10

数组去重方式11

以上是利用数据结构中set不允许重复项的特点来达到去重复的目的,与算法无关了,非常简单好用。map的key值是唯一的,因此也可以利用这个原理来实现去重复。

  • 先排序再去重复

数组去重方式12

数组去重方式13

数组去重方式14

这里利用的是将数组先排好序,然后再挨个比较去掉重复项。也可以利用reduce来比较前后项,reduce函数主要用于集合中元素依次归纳(combine),可以用来累加或累乘,这个也是参照的js语言。

  • 利用递归移除或追加到新数组中

数组去重方式15

以上两种方式是利用递归来替代for循环,基本效果与for循环没啥区别。后面的递归例子展示了如何拼接递归结果,这个方式与js也基本一样。

  • 验证程序

随意构造含有重复项的数组,写几个测试用例,运行后可以看到结果已经去掉了重复项。

总结

通过数组去重算法基本展示了Dart语言的特点,可以发现Dart是一门强类型、类C风格的编程语言,其写法上与JS和Java非常像。其数组去重复的算法也有很多种方式,用不同的方式来实现有助于我们更好地掌握这门语言。