小编sim*_*son的帖子

迭代迭代迭代器的最快方法是什么?

假设我想反过来迭代泛型迭代器,而不知道迭代器的内部结构,并且基本上不通过无类型魔法作弊,并假设这可以是任何类型的迭代,它为迭代器提供服务; 我们可以在运行时甚至通过宏优化迭代器的反转吗?

前锋

var a = [1, 2, 3, 4].iterator();
// Actual iteration bellow
for(i in a) {
   trace(i);
}
Run Code Online (Sandbox Code Playgroud)

向后

var a = [1, 2, 3, 4].iterator();
// Actual reverse iteration bellow
var s = [];
for(i in a) {
    s.push(i);    
}
s.reverse();
for(i in s) {
    trace(i);    
}
Run Code Online (Sandbox Code Playgroud)

我认为必须有一种更简单的方法,或者至少是快速的方法.我们无法知道一个大小,因为Iterator类没有携带一个,所以我们不能将推送反转到临时数组.但我们可以删除反向,因为我们知道临时数组的大小.

var a = [1,2,3,4].iterator();
// Actual reverse iteration bellow
var s = [];
for(i in a) {
    s.push(i);    
}
var total = s.length;
var totalMinusOne = total - 1; …
Run Code Online (Sandbox Code Playgroud)

iterator haxe

7
推荐指数
2
解决办法
2233
查看次数

在调用之前按顺序完成所有函数参数

我试图理解以下zip函数(尤其是调用函数)如何变得更加实用.我得到的问题是,invoke方法必须等待左侧和右侧都可以在它调度值之前填充.必须按顺序调用这些值,以便压缩正确的值,否则我会考虑使用curry/partial函数来实现此目的.

有什么我可以使用可以消除这种阻碍.

function zip(state, a, b) {
    var left = [];
    var right = [];

    function invoke() {
        if (left.length > 0 && right.length > 0) {
            state([left.shift(), right.shift()]);
        }
    }

    a.foreach(function(v) {
        left.push(v);
        invoke();
    });

    b.foreach(function(v) {
        right.push(v);
        invoke();
    });
}
Run Code Online (Sandbox Code Playgroud)

Bellow是满足zip功能的简单例子.

function Stream() {
    var env = this;
    env.subs = [];
    env.id = setInterval(function() {
        env.subs.forEach(function(f) {
            f(Math.random()); 
        });
    }, ((Math.random() * 100) + 500) | 0);
}
Stream.prototype.foreach = function(f) {
    this.subs.push(f);
}
zip(function(v) {
    console.log(v);
}, …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming frp

1
推荐指数
1
解决办法
311
查看次数

标签 统计

frp ×1

functional-programming ×1

haxe ×1

iterator ×1

javascript ×1