List 快速入门

要使用 List ,首先需要创建一个基于 Array 的 List ,然后各种演算都可以通过 List 进行。完成演算后,可以使用 toArray 方法将数据输出为 Array ,可以使用 each 方法遍历数据,还可以通过 at 方法按索引访问数据。

var originalArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var originalList = new List(originalArray);

var calculatedList = originalList
    .map(function(i) { return i * (i + 1) / 2; })
    .filter(function(i) { return i > 10 && i < 50; })

var calculatedArray = calculatedList.toArray();
assert(calculatedArray == [15, 21, 28, 36, 45]);

calculatedList.each(function(i) { alert(i); });

assert(calculatedList.at(0) == 15);
assert(calculatedList.at(4) == 45);

在某些情况下,无穷 List 会特别有用。例如说,你需要按照一个规则填充一个数组,这个填充可以无限进行下去,但是你在演算之前无法预知需要填充多大的数组。一个具体的例子是,你需要知道对 Fibonacci 数列排除掉第一位的 0 后进行连乘的话,多少项后乘积会超过 10000 ,这时候你无法预知需要生成 Fibonacci 数列的前多少位,所以可以使用无穷 List 来解决这个问题。

var a = 0, b = 1;
var list = List
    .generate(function(proxy) {
        proxy.yield(a);
        var aNext = b;
        var bNext = a + b;
        a = aNext;
        b = bNext;
    })
    .drop(1)
    .scan(function(acc, i) { return acc * i; }, 1)
    .takeWhile(function(i) { return i < 10000; });
assert(list.length() == 8);