【问题标题】:Is it possible to initialize a List on one line in Dart? (it's called a collection initializer in c#)是否可以在 Dart 中的一行上初始化列表? (在 C# 中称为集合初始化器)
【发布时间】:2021-08-31 12:56:02
【问题描述】:

是否可以在 Dart 的一行中初始化一个列表?类似于以下内容...

List<int> options = new List<int>{ 1,2,5,9 };

(这在 c# 中是可能的,称为集合初始化器)

【问题讨论】:

标签: dart


【解决方案1】:

是的:

List<int> options = [1, 2, 5, 9];

我建议阅读:

【讨论】:

  • 谢谢,语法差异越小,我在尝试其他语言时就越有可能:-)
  • 列表 选项 = [1, 2, 5, 9];也给文字类型
【解决方案2】:

是的,您可以使用 List.unmodifiable 构造函数来实现:

var options  = new List.unmodifiable([3,6,7,8]);

或者通过使用List.from 构造函数:

var options  = new List.from([3,6,7,8]);

或者像这样:

var options  = [5,7,9,0];

【讨论】:

    【解决方案3】:

    还有可用的 List.filledList.generate 工厂构造函数:

    List<int?> s = List.filled(5, 10, growable: true); // [10, 10, 10, 10, 10]
    

    这将创建长度为 5 的列表,类型为 int 或 null,并用 10 初始化每个元素。此列表是可增长的,这意味着可以使用 setter 更改其长度:

    s.length = 10;
    s[8] = 2;  // [10, 10, 10, 10, 10, null, null, null, 2, null]
    

    更改列表长度后,新元素将被初始化为 null。如果列表元素类型不可为空,则会导致异常。

    List.generate 生成一个值列表。

    var n = List.generate(5, (index) => 0); // [0, 0, 0, 0, 0]
    

    创建的列表是定长的,每个元素都设置为0。

    List<int?> n = List.generate(5, (index) => index * index, growable: true); // // [0, 1, 4, 9, 16]
    

    如果我们想创建可增长的列表(即我们将 growable 设置为 true),我们需要明确选择不可为空的类型,例如。 int? 就像我们在这里所做的那样,否则增加列表长度会引发异常。这代表 List.generate 和 List.filled 工厂。

    关于这些的好读物是:

    https://api.dart.dev/stable/1.24.3/dart-core/List/List.generate.htmlhttps://api.dart.dev/stable/1.24.3/dart-core/List/List.filled.html

    【讨论】:

      【解决方案4】:
        var vals = <int>[1, 2, 3];
        var vals2 = List<int>()..addAll([1, 2, 3]);
        var vals3 = List<int>.of([1, 2, 3]);
      

      请注意,当我们不提供类型时,我们实际上创建了一个 动态类型。此外,new 关键字是可选的。

      【讨论】:

        【解决方案5】:

        方括号定义List

        var listOfInt = [1,2,3]

        大括号定义Set

        var setOfInt = {1,2,3};

        带冒号的大括号定义Map

        var mapOfIntString = {1: "a", 2: "b"};

        可以明确指定类型。

        var list = <int>[1,2,3]
        
        var setOfInt = <int>{1,2,3};`
        
        var map = <int,String>{1: "a", 2: "b"};
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-23
          • 2011-12-14
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          • 2012-10-14
          相关资源
          最近更新 更多