【问题标题】:How do I use the result of map() on a list in Dart?如何在 Dart 的列表中使用 map() 的结果?
【发布时间】:2013-12-18 14:09:50
【问题描述】:

我有以下代码:

scaleV (xs, c) => [c * xs[0], c * xs[1], c * xs[2]];

double phi = (1 + sqrt(5))/2;
List<List<double>> v = [[ 0.0, -1.0, phi],
                        [-phi,  0.0, 1.0],
                        [-1.0,  phi, 0.0],
                        [ 1.0,  phi, 0.0],
                        [ phi,  0.0, 1.0]];

要否定每个向量,我希望我可以使用 map(),这是一个常见的函数构造:

var w = v.map((x) => scaleV(x, -1.0));

w[0]、w[1] 等显然不能直接使用。在浏览器控制台中,尝试使用 w[0] 时出现“TypeError:w.$index 不是函数”。 “w is List”也是假的。

我希望这与 map() 方法的文档有关:

返回一个惰性 Iterable,其中每个元素 e 都被 f(e) 的结果替换。

但我不完全确定我是否理解这一点。在上面使用 List.from 似乎也不起作用。

如何使用 map() ?

【问题讨论】:

    标签: dart


    【解决方案1】:

    正如你提到的,map() 返回一个iterable。您可以对其进行迭代,例如使用forEach,但您不能通过索引访问元素。 您可以致电toList 来创建它的列表。

    var w = v.map((x) => scaleV(x, -1.0)).toList();
    
    assert(w is List);
    

    但它也应该与List.from 构造函数一起使用。我不确定为什么不工作,你有例外吗?

    var w = new List.from(v.map((x) => scaleV(x, -1.0)));
    
    assert(w is List);
    

    【讨论】:

    • 我想我知道为什么 List.from() 不起作用。我想我忘记了它是一个命名构造函数,因此需要与 new 一起使用。无论如何,谢谢,我不知道 toList()。
    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2021-05-14
    • 2022-08-10
    • 2019-07-05
    • 2021-07-07
    • 2020-04-27
    • 2021-11-14
    相关资源
    最近更新 更多