【问题标题】:How to filter a map using Lambda?如何使用 Lambda 过滤地图?
【发布时间】:2013-11-30 11:08:34
【问题描述】:

我有一个地图变量:

var bitmapDepths:Map<BitmapData, Int>;

我需要删除所有值为 0 的键,我试过这个:

bitmapDepths= Lambda.filter(Lambda.list(bitmapDepths.keys), function(v) { return (v > 0); });

所以,我使用 Lambda.list 对 Lambda 内部的 bitmapDepths.keys 进行迭代,但我得到了这个错误:

Void -> Iterator<flash.display.BitmapData> should be Iterable<Unknown<0>>

我尝试 Lambda.array 对 bitmapDepths.keys 进行迭代,我得到了同样的错误,那么谁能处理这个问题?使用 Lambda 根据值删除键?

【问题讨论】:

    标签: lambda haxe


    【解决方案1】:

    不要使用 Lambda。它是在 Haxe 1 中添加的一个类。在 Haxe 3 中,for 循环/理解几乎总是更好的选择。

    移除原位键:

    for (k in bitmapDepths.keys()) if (k == 0) bitmapDepths.remove(k);
    

    构建新地图:

    bitmapDepths = [for (k in bitmapDepths.keys()) if (k != 0) k => bitmapDepths.get(k)];
    

    它不仅更短,还具有更好的运行时性能。

    【讨论】:

    • 我做了一个快速测试 lambda.fold vs Reflect.compare(这不起作用) vs loop try.haxe.org/#daAAE
    猜你喜欢
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2017-01-11
    相关资源
    最近更新 更多