一、Sets

向已存在的 Set 中添加项目:

void main() {
    var elements = <String>{};
    // add
    elements.add("Nike");
    print(elements);
    var names = {"张三", "李四", "王五"};
    // addAll
    elements.addAll(names);
    print(elements);
    // .length
    print(elements.length);
    assert(elements == 4);
}

在 Set 变量前面添加 const 关键字创建一个 Set 编译时常量:

void main() {
    final names = const {
        '张三',
        '李四',
        '王五',
        'Nike',
        '高学同',
    };
    names.add('向天宇'); // error:Cannot change an unmodifiable set
}

Set 是没有顺序且不能重复的集合,所以不能通过索引获取值,主要功能是去除数组重复的内容

构造函数创建 Set 集合

void main() {
    // var mySet = new Set();
    // mySet.add('樱桃');
    // mySet.add('菠萝');
    // mySet.add('菠萝');
    // print(mySet);
    // print(mySet.toList());
    List myList = ['樱桃', '菠萝', '椰子', '樱桃', '菠萝', '樱桃', '菠萝'];
    var mySet = new Set();
    mySet.addAll(myList);
    print(mySet);
    print(mySet.toList());
}

二、Maps

通常来说,Map 是用来关联 keys 和 values 的对象。其中键和值都可以是任意类型的对象。每个键只能出现一次,但是值可以重复出现。

1、Maps 创建

使用 Map 字面量创建 Map:

void main() {
    var gifts = {
        // key: value
        'first': '小花花',
        'second': '大火箭',
        'third': '保时捷'
    };
    print(gifts);
}

使用 Map 构造器创建 Map:

void main() {
    var gifts = Map<String, String>();
    gifts['first'] = '大别野';
    gifts['second'] = '灰太狼';
    gifts['third'] = '红太狼';
    print(gifts);
}
void main() {
    Map person = {'name': 'Cherry', 'age': 16};
    print(person);
    var myMap = new Map();
    myMap['name'] = '高学同';
    print(myMap);
}

2、Maps 常用属性

属性 作用
keys 获取所有的 key 值
values 获取所有的 value 值
isEmpty 是否为空
isNotEmpty 是否不为空
void main() {
    Map person = {'name': 'Cherry', 'age': 16, 'gender': '女'};
    print(person.keys); // (name, age, gender)
    print(person.keys.toList()); // [name, age, gender]
    print(person.values); // (Cherry, 16, 女)
    print(person.values.toList()); // [Cherry, 16, 女]
    print(person.isEmpty); // false
    print(person.isNotEmpty); // true
}

3、Maps 常用方法

方法 作用
addAll({…}) 合并映射,给映射内增加属性
remove(key) 删除指定 key 的数据
containsValue 查看映射内的值,返回 true / false
void main() {
    Map person = {'name': 'Cherry', 'age': 16, 'gender': '女'};
    person.addAll({
        'job': ['敲代码', '讲课'],
        'height': '173cm'
    });
    print(person); // {name: Cherry, age: 16, gender: 女, job: [敲代码, 讲课], height: 173cm}
    print(person.remove('gender')); // 女
    print(person); // {name: Cherry, age: 16, job: [敲代码, 讲课], height: 173cm}
    print(person.containsValue('Cherry')); // true
    print(person.containsValue('Berry')); // false
    print(person.containsKey('name')); // true
    print(person.containsKey('aaa')); // false
}

三、集合的遍历

1、for、for…in、forEach

for 循环:

void main() {
    List fruitList = ['樱桃', '椰子', '菠萝'];
    for (var i = 0; i < fruitList.length; i++) {
        print(fruitList[i]);
    }
}

for…in:

void main() {
    List fruitList = ['樱桃', '椰子', '菠萝'];
    for (var item in fruitList) {
        print(item);
    }
}

forEach:

void main() {
    // Lists
    List fruitList = ['樱桃', '椰子', '菠萝'];
    fruitList.forEach((value) {
        print("$value");
    });
    // 箭头函数
    fruitList.forEach((value) => print(value));

    // Sets
    var mySet = new Set();
    mySet.addAll([97, 85, 77]);
    mySet.forEach((value) {
        print(value);
    });
    mySet.forEach((value) => print(value));

    // Maps
    Map person = {'name': 'Cherry', 'age': 16};
    person.forEach((key, value) {
        print("$key---$value");
    });
}

注意:箭头函数是一种简写模式,与 JavaScript / TypeScript 中的箭头函数不同的是:Dart 语言中的箭头函数 目前不支持多条语句,也就是说,如果写多条语句,就不可以使用箭头函数的写法

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐