Flash使用兩種方法實現字典(即類似於HashMap的字典)。一種方法是flash.utils.Dictionary
類,另一種是通用的Object
。我想查看字典中有多少個key:value
對。在大多數情況下,我只想知道它有任何key:value
對,即只檢查它是否爲空。AS3:檢查字典是否爲空
這方面的文檔沒有太多的幫助。有沒有簡單明瞭的方法來做到這一點?如果沒有,那麼有沒有一種醜陋但不太脆弱的方式來做到這一點?
Flash使用兩種方法實現字典(即類似於HashMap的字典)。一種方法是flash.utils.Dictionary
類,另一種是通用的Object
。我想查看字典中有多少個key:value
對。在大多數情況下,我只想知道它有任何key:value
對,即只檢查它是否爲空。AS3:檢查字典是否爲空
這方面的文檔沒有太多的幫助。有沒有簡單明瞭的方法來做到這一點?如果沒有,那麼有沒有一種醜陋但不太脆弱的方式來做到這一點?
,想到的唯一辦法是通過所有鍵進行迭代並計數 - 像這樣:
var count:int = 0;
for (var key:Object in dict)
{
count++;
}
漂亮跛 - 但我認爲那是你還剩下什麼。請注意,Dictionary對於vanilla Object來說只是一個真正非常薄的包裝。
這將可靠地告訴你,如果一個特定的字典是空的:
function isEmptyDictionary(dict:Dictionary):Boolean
{
for each(var obj:Object in dict)
{
if(obj != null)
{
return false
}
}
return true;
}
請注意,你需要做的obj != null
檢查 - 即使你設置myDictionary[key] = null
,它仍然會遍歷一個空的對象,所以在這種情況下,常規的for...in
循環將不起作用。 (如果你總是使用delete myDictionary[key]
,你應該沒問題)。
另一種方法是添加一個詞典條目dict [「count」],每次將項目添加到字典時迭代,並在每次刪除項目時進行迭代。或者更復雜的解決方案將繼承Dictionary,並添加push,pop和長度屬性,這些屬性的功能基本相同。
而且由OP提到的空/空特例:
var empty:Boolean = true;
for (var key:Object in dict)
{
empty = false;
break;
}
這樣的代碼在一個效用函數應該去複製它所有的地方,而不是因此在使用的時候它會明顯發生了什麼事情。
測試和工作。
通過避免負面語言提高了清晰度。
/**
* @return Whether given Dictionary has content or is empty.
*/
public function hasContent(dictionary:Dictionary):Boolean
{
for (var anything:Object in dictionary)
return true;
return false;
}
這似乎是一個不良做法的解決方案。從字典中刪除條目應刪除鍵和值。如果由於某種原因,我想刪除這個值,但是離開這個鍵,那麼這個字典就不是真的空 - 它有一些(顯然是有意義的)鍵。 – 2009-10-14 17:32:39
夠公平的。如果你刪除(obj!= null)語句,那麼這將起作用,但我猜測其他答案也會起作用... – Reuben 2009-10-14 20:27:18
其實,最好不要將上述方法結合使用...與這一個? for ... in方法告訴你是否有任何鍵,這很重要。如果您的鍵值爲空,則此方法可能會失敗。 – scriptocalypse 2011-04-19 19:28:34