2013-11-30 2 views
0

У меня есть переменная карты:Как фильтровать карту с помощью лямбда?

var bitmapDepths:Map<BitmapData, Int>; 

Что мне нужно, чтобы удалить все ключи со значением 0, я попытался это:

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

Таким образом, я использовал Lambda.list для итерации по bitmapDepths .keys внутри Lambda, но я получаю эту ошибку:

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

Я попытался Lambda.array итерировать на bitmapDepths.keys, я получил ту же ошибку, так что, кто может справиться с этим? удалить ключи на основе значений с помощью Lambda?

ответ

1

Не используйте Лямбда. Это класс, который был добавлен в Haxe 1. В Haxe 3, для циклов/понятий почти всегда лучший выбор.

Чтобы удалить ключи на месте:

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

Чтобы построить новую карту:

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

не только короче, но и имеет более высокую производительность во время выполнения.

+0

О, спасибо! Я думал, что Lambda - это классная вещь для использования :) – simo

+1

что?! Лямбда хромая ??! Я тоже круто! – postite

+1

Я сделал быстрый тест lambda.fold vs Reflect.compare (который не работает) против цикла http://try.haxe.org/#daAAE – postite

Смежные вопросы