我需要一個只包含值0和1的數組。bool[]
對我來說足夠好嗎?還是有更輕的重量?僅包含0和1值的數組
編輯:
我沒有內存限制,但陣列由和網絡傳遞的所有時間與大文件與陣列經過兼任。我希望最大化優化,以便大文件不會被延遲
我需要一個只包含值0和1的數組。bool[]
對我來說足夠好嗎?還是有更輕的重量?僅包含0和1值的數組
編輯:
我沒有內存限制,但陣列由和網絡傳遞的所有時間與大文件與陣列經過兼任。我希望最大化優化,以便大文件不會被延遲
布爾可能不是最好的辦法。取決於您獲得了多少個數字。
重要的是要認識到,即使布爾是一個位,它需要一個完整的字節在內存中。
另一方面,BitArray爲您提供了更多的空間效率,儘管時間效率稍低。 http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx
取決於您的約束條件,如果它不適用於受限制的環境,布爾型數組將工作得很好。
我沒有內存限制,但該數組是製作並通過聯機所有與大文件的時間同時通過該數組。我想要最大化優化,以便大文件不會被延遲。那麼你現在最喜歡什麼? –
@StavAlfi定義「大」,有多大? – KingCronus
可以是1 GB或更大。 –
布爾數組已經足夠好了。您可以將「false」視爲0
,將「true」視爲1
。
不是必需的。一個Bool消耗8位內存,浪費了一些可以保存的東西。 – KingCronus
@KingCronus我對此並不確定,但是據我所知,CPU可以處理的最小位數是8位,這就是爲什麼它沒有關係。 – idish
我知道。如果你必須存儲8個布爾,你建議使用8個字節。我建議使用1個字節,如01010101 - 然後OP可以使用內存的八分之一。當然,檢索一個特定的值稍微複雜一點,但當然可能。 – KingCronus
bool[]
會做的伎倆......如果你的數字其實只是「標誌」而不是實數。
將Enum
與Flags
屬性結合使用是另一種選擇。這將允許你爲兩個布爾值都有一個Intention Revealing Name
。
[Flags()]
public enum TheFlags
{
NoneSet = 0,
FirstSet = 1,
SecondSet = 2
}
那麼,如果 「第一」 設置一樣,所以你可以檢查:
TheFlags flags = TheFlags.FirstSet;
if (flags.HasFlag(TheFlags.FirstSet))
Console.WriteLine("First flag is set!");
['System.Collections.BitArray'](http://msdn.microsoft.com/en-us/庫/ system.collections.bitarray.aspx)。 – GSerg
'重量太重了嗎?你有什麼記憶力的限制? – Oded
我沒有內存限制,但是這個數組已經制作完成,並且通過了所有的在線時間。 –