如何在Dart列表中使用map()的结果?

时间:2013-12-17 06:45:42

标签: dart

我有以下代码:

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()?

1 个答案:

答案 0 :(得分: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);