dart系列之:集合使用最佳实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dart系列之:集合使用最佳实践相关的知识,希望对你有一定的参考价值。

参考技术A dart中有四种集合,分别是Set,List,Map和queues。这些集合在使用中需要注意些什么呢?什么样的使用才是最好的使用方法呢?一起来看看吧。

对于常用的Set,Map和List三个集合来说,他们是有自己的无参构造函数的:

可以看到Set和Map是可以使用构造函数的。但是对于List来说,无参的构造函数已经不推荐使用了。

对于Set和Map来说,可以这样构造:

但是dart官方推荐直接使用字面量来创建这些集合,如下所示:

为什么呢?这是因为dart中的字面量集合是非常强大的。可以通过扩展运算符,if和for语句对集合进行构造和扩展,如下所示:

对应dart的可遍历集合来说,这些集合并没有存储集合的长度信息,所以如果你调用集合的.length方法,可能会导致集合的遍历,从而影响性能。

所以,我们需要调用集合的.isEmpty 和 .isNotEmpty方法来判断集合是否为空,这样速度更快。

对应Set和List这两个可遍历的集合来说,有两种遍历方法,可以通过调用forEach() 方法或者for-in来进行遍历,如下所示:

这两种方法中,dart推荐使用for in的写法。

当然,如果你想将现有的function应用在集合中的每个元素中,forEach也是可以的:

可遍历对象可以通过调用toList将其转换成为List,同样的List.from也可以将可遍历对象转换成为List。

那么两者有什么区别呢?

两者的区别是iterable.toList并不会改变list中数据的类型,而List.from会. 举个例子:

当然,你也可以使用List<T>.from来强制对创建出来的List进行类型转换。

对于可遍历对象来说,两个过滤集合中元素的方法,他们是where和whereType。

比如,我们需要过滤List中的字符串,则可以这样写:

看上去两者没有太大的区别,都可以得到应有的结果。但是两者事实上还是有区别的,因为对应where来说,返回的是一个 Iterable<Object> ,所以上面的例子中,如果我们真的需要返回String,还需要对返回结果进行case:

所以,如果你要返回特定的对象时候,记得使用whereType。

cast通常用来对集合中的元素进行类型转换操作,但是cast的性能比较低,所以在万不得已的情况下,一定要避免使用cast。

那么如果不使用cast,我们怎么对类型进行转换呢?

一个基本的原则就是在构建集合的时候提前进行类型转换,而不是在构建集合之后再进行整体的cast。

比如下面的例子从一个dynamic类型的List转换成为int类型的List,那么我们可以在调用List.from方法的时候进行类型转换:

如果是map的话,可以这样操作:

比如我们需要构建一个int的List,那么在创建之初就可以指定List的内部类型,然后再对其添加元素:

以上就是dart中的集合使用最佳实践。

以上是关于dart系列之:集合使用最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Dart/Flutter 中 BLoC 模式的最佳实践

Yii系列最佳实践之后台业务框架

Yii系列最佳实践之后台业务框架

ElasticsearchElasticsearch 最佳实践系列之分片恢复并发故障

云计算最佳实践系列之 K8s集群搭建+容器编排

SpringBoot2.X最佳实践《一》 之 SpringBoot2.x初体验