2016-09-29 37 views
1

我有一堆我在地圖中存儲值的實體。我知道其中一些沒有價值。地圖Scala:帶值類型的地圖選項

通過使用Map[Entity, Option[Value]]來明確這一點是否是一種很好的做法,或者您認爲Map本身已經具有這些語義?

+3

從語義上講,這兩種解決方案並不等同。如果您需要知道哪些實體存在(基於密鑰集),那麼您需要使用您的解決方案。但是,我仍然會採用第二種方法(使用簡單的「Map」)並在另一個地方管理所有實體的集合。然後'Map'定義了一個Entity和它的Value之間的映射關係,如果沒有映射,那麼沒有理由首先添加'Entity'作爲關鍵字。 – fxlae

+0

我個人認爲使用Option作爲值是沒有意義的(即使你需要處理默認情況,你可以使用'withDefaultValue')。但是我必須提出這個問題,因爲它相當主觀。也許http://programmers.stackexchange.com/應該是一個更好的地方 –

回答

2

地圖有get方法,該方法已經返回Option,所以這真的不是必需的,並且會混淆地圖的類型參數。

1

只需使用Map[Key, Value]

Map[Key, Option[Value]]是矯枉過正

對於第二種情況Map("key" -> None)。您不想保留其值不爲零的密鑰

2

這取決於用例。您可能需要也可能不需要區分「無價值」和「無鑰匙」情景。想象一下,例如,用戶的名字和中間名之間的映射。 當密鑰存在時,但值爲None,這意味着用戶沒有中間名。如果密鑰不存在,那麼您沒有該用戶的記錄。

另一方面,假設您將年份數字映射到2月29日的星期幾。在這種情況下,非閏年根本不需要在地圖中,並且您可以假定,如果某個關鍵不在那裏,那是因爲沒有與其關聯的值。