Flutter Widget 之 collection

572 阅读2分钟

这一周里,第三次实施二元搜索法,你厌倦了吗?

你希望通过深度质量来比较集合吗?你需要为有向图生成传递闭包吗?或者你只是想得到一些处理你的应用程序中的列表、地图和集合的帮助?

var myList = ['Nilay', 'Brett', 'Shams', 'Kathy'];

package:collection是你对所有这些以及更多的答案。

这个包时包含在Flutter SDK的包之一,所以你所需要做的就是导入它

import 'packahe:collection/collection.dart';

假设你有两个列表,你想检查它们是否包含相同顺序的相同元素,只要使用ListEquality就可以了

var a = ['Nilay', 'Brett', 'Shams', 'Kathy'];
var b = ['Nilay', 'Andrew', 'Fits', 'Filip'];
ListEquality().equals(a, b)

你的两个集合包含其他集合吗?你可能希望使用DeepCollectionEquality

var a = [{'apple', 'red'}, {'banana', 'yellow'}];
var b = [{'apple', 'red'}, {'banana', 'black'}];
DeepCollectionEquality().equals(a, b);

你是否需要实施一个优先级较高的元素总是先被移除的优先级队列?没问题,只需使用PriorityQueue类

// TODO: implement priority queue

// Priority queue
var ququq = PriorityQueue<Person>(
    (a, b) => a.kindness.compareTo(b.kindness),
);
queuue.addAll(people);
var mon = queue.removeFirst();

想在不允许别人更改的情况下公开一组元素?

class Team {
    var _people = <Person>{};
    
    Set<Person> get people => _people;
}

image.png

使用UnmodifiableSetView,这样,没有人会不小心修改那个被返回的集合

class Team {
    var _people = <Person>{};
    
    UnmodifiableSetView<Person> get people => UUnmodifiableSetView(_people);
}

想要按某个属性对元素列表进行分组吗?只需是哟哦那个groupBy函数,它将创建一个从所选属性指向共享该属性的成员列表的映射

// TODO: split people into groups

// Split people into groups
var teams = grooupBy(
    people,
    (People p) => p.favoriteColor,
);
var teamRed = teams[Coloors.red];

有一组数字,并且希望你能得到它们的总和?package:collectiion为你提供了这样的扩展

var numbers = [1, 2, 3, 4];

// TODO: compute sum
var total = numbers.sum;

那平均呢?是的,就在那里

var numbers = [1, 2, 3, 4];
var total = numbers.sum;
avg = numbers.average;

package:collection中还有许多其他非常有用的函数、类和扩展。

这正是值得从头到尾研究的包之一

ezgif.com-gif-maker.gif

如果想了解有关collection 的内容,或者关于Flutter的其他功能,请访问flutter.dev

原文翻译自视频:视频地址