[Dart语法]第三章:数据类型-集合类型

集合Set

声明变量

//声明时直接赋值
Set category = {'书籍', '水果', '服饰'};
//先声明再赋值,new在dart中可以省略
Set fruit = new Set();
fruit.add('苹果');
fruit.add('香蕉');
fruit.add('梨子');

print(category);		//{书籍, 水果, 服饰}
print(fruit);			//{苹果, 香蕉, 梨子}

属性

Set set = {1, 2, 3, 4, 5, 6};
print(set.first); //1
print(set.last); //6
print(set.length); //6
print(set.isEmpty); //false
print(set.isNotEmpty); //true
//如果集合不是单个值就报错,否则返回值
print(set.single); //报错

方法

集合添加
Set set = {1, 2, 3, 4};
//add 在尾部添加单个值
set.add(5);
print(set);//{1, 2, 3, 4, 5}

//addAll 在尾部添加多个值
set.addAll({7, 8, 9});
print(set);//{1, 2, 3, 4, 7, 8, 9}

//followedBy 懒添加
Set set = {1, 2, 3, 4};
Set set2 = {888, 999};
print(set.followedBy(set2));//(1, 2, 3, 4, 888, 999)


集合删除
Set set = {1, 2, 3, 4};
//remove 删除单个值
set.remove(2);
print(set);//{1, 3, 4}

//removeAll	删除多个值
set.removeAll({2, 3});
print(set);

//removeWhere 按条件进行删除
set.removeWhere((element) => element == 3);
print(set);//{1, 2, 4}

//clear 清空集合
set.clear();
print(set);//{}

//difference 返回和设定集合不同的值,差集
print(set.difference({1, 2}));//{3, 4}
//intersection 返回和设定集合相同同的值,交集
print(set.intersection({2, 3}));
//union	添加新的集合,并集
print(set.union({888, 999}));//{1, 2, 3, 4, 888, 999}
集合数据类型转换
Set set = {1, 2, 3, 4};
//转字符串
print(set.join()); //1234
print(set.toString()); //{1, 2, 3, 4}

//转数组
print(set.toList()); //[1, 2, 3, 4]
集合遍历
//forEach 
Set set = {1, 2, 3, 4};
set.forEach((element) {
    print(element);
});
/*
1
2
3
4
*/

//map
Set set = {1, 2, 3, 4};
var res = set.map((e) => e * e);
print(res);//(1, 4, 9, 16)

//reduce
Set set = {1, 2, 3, 4};
var res = set.reduce((a, b) => a * b);
print(res);//24

//fold
Set set = {1, 2, 3, 4};
var res = set.fold(10, (a, b) => a * b);
print(res);//240

//expand
Set set = {1, 2, 3, 4};
var res = set.expand((element) => [element, element + 1]);
print(res);//(1, 2, 2, 3, 3, 4, 4, 5)
集合匹配
Set set = {1, 2, 3, 4};
//every 全部满足条件返回true否则false
print(set.every((element) => element > 2));

//any	一个满足条件返回true,否则fals
print(set.any((element) => element > 2));

//where	返回满足条件的值
var res = set.where((element) => element > 2);
print(res);

//firstWhere 返回从左到右满足条件的第一个值
var res = set.firstWhere((element) => element > 1);
print(res);//2

//lastWhere 返回从右到左满足条件的第一个值
var res = set.lastWhere((element) => element > 2);
print(res);//4

//singleWhere 如果满足条件的值只有一个,返回其值,否则报错
var res = set.singleWhere((element) => element > 3);
print(res);//4

//whereType 返回设定类型的值
Set set = {1, 2, 'a', 4};
Iterable<int> res = set.whereType();
print(res);//(1, 2, 4)
Iterable<String> res2 = set.whereType();
print(res2);//(a)

//retainWhere 返回满足条件的值,如果都不满足返回空集合
set.retainWhere((element) => element == 5);
print(set);//{}
set.retainWhere((element) => element > 2);
print(set);//{3, 4}

//retainAll	返回满足条件的值的集合,一个满足,一个不满足,返回满足的值,都不满足返回空集合
set.retainAll({2, 3});
print(set);//{2, 3}
set.retainAll({2, 5});
print(set);//{2}

//contains	集合中包含设定值返回true,否则false
print(set.contains(3));//true
//containsAll 集合中包含设定值返回true,否则false
print(set.containsAll({3, 2}));//true

//lookup 集合中包含设定值返回其值,否则返回null
print(set.lookup(2));//2
取值和略值
//elementAt 取索引值为2的值
print(set.elementAt(2));//3

//跳过前两个,返回其余的值
print(set.skip(2));//(3, 4)

//从左到右跳过满足条件的值到不满足条件的值为止,返回其余的值
print(set.skipWhile((value) => value < 2));//(2, 3, 4)

//取前两个值
print(set.take(2));//(1, 2)

//从左到右取满足条件的值到不满足条件的值为止
print(set.takeWhile((value) => value < 3));//(1, 2)
posted @   漫游者杰特  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示