这一周里,第三次实施二元搜索法,你厌倦了吗?
你希望通过深度质量来比较集合吗?你需要为有向图生成传递闭包吗?或者你只是想得到一些处理你的应用程序中的列表、地图和集合的帮助?
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;
}
使用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中还有许多其他非常有用的函数、类和扩展。
这正是值得从头到尾研究的包之一
如果想了解有关collection 的内容,或者关于Flutter的其他功能,请访问flutter.dev
原文翻译自视频:视频地址