2014-03-28 31 views
1

HAXEtranspiling到PHP

public var bonus:Map<Int,Int>; 

if (bonus.exists(id)) 
    score += bonus.get(id); 

編譯下面的PHP

if($bonus->exists($id)) 
    $score += $bonus->get($id); 

理想我想haXe的生成時是否有地圖在HAXE 更快的替代方案

if(isset($bonus[$id])) 
    $score += $bonus[$id]; 

我懷疑這將是可能的使用動態但我想避免使用動態,因爲它不是推薦誰料。存在是不必要的,但不會編譯爲我們的as3目標。當前的性能分析顯示存在(執行時間的50%)和get(30%)相當昂貴。我希望可以使用內置數組類型或至少內聯存在和獲取調用。任何人都可以告訴我如何或建議一個更好的方式來做到這一點?

感謝

回答

0

對於PHP的isset()函數,你可以簡單地比較空的變量,即。 「myVar!= null」。

if(bonus[id] != null) 
    score += bonus[id]; 

或三元操作

score += (bonus[id] != null) ?: bonus[id]; 

旁註:

我相信,你也可以嘗試使用Lambda.has(arrayOrMap, "key");一個PHP in_array()解決方案。但我不確切知道Lambda.has是否適用於Maps。

但仍然,!=會比打電話給in_array()更快。

+0

你好,我試圖檢查ID是否在地圖獎勵,而不是如果ID是非空。我會試試Lambda。 –

+0

好吧,錯了。對Array的ArrayAccess如何:bonus [id] - 相應地更新了我的答案。 –

+0

工程很棒,現在已經不存在了。 get(id)!= null對我來說不適用於as3,但這似乎對我的兩個目標都能正常工作。非常感謝。 –