2012-09-07 74 views
-1

我需要一個只包含值0和1的數組。bool[]對我來說足夠好嗎?還是有更輕的重量?僅包含0和1值的數組

編輯:

我沒有內存限制,但陣列由和網絡傳遞的所有時間與大文件與陣列經過兼任。我希望最大化優化,以便大文件不會被延遲

+6

['System.Collections.BitArray'](http://msdn.microsoft.com/en-us/庫/ system.collections.bitarray.aspx)。 – GSerg

+0

'重量太重了嗎?你有什麼記憶力的限制? – Oded

+0

我沒有內存限制,但是這個數組已經制作完成,並且通過了所有的在線時間。 –

回答

2

布爾可能不是最好的辦法。取決於您獲得了多少個數字。

重要的是要認識到,即使布爾是一個位,它需要一個完整的字節在內存中。

另一方面,BitArray爲您提供了更多的空間效率,儘管時間效率稍低。 http://msdn.microsoft.com/en-us/library/system.collections.bitarray.aspx

取決於您的約束條件,如果它不適用於受限制的環境,布爾型數組將工作得很好。

+0

我沒有內存限制,但該數組是製作並通過聯機所有與大文件的時間同時通過該數組。我想要最大化優化,以便大文件不會被延遲。那麼你現在最喜歡什麼? –

+0

@StavAlfi定義「大」,有多大? – KingCronus

+0

可以是1 GB或更大。 –

1

布爾數組已經足夠好了。您可以將「false」視爲0,將「true」視爲1

+0

不是必需的。一個Bool消耗8位內存,浪費了一些可以保存的東西。 – KingCronus

+0

@KingCronus我對此並不確定,但是據我所知,CPU可以處理的最小位數是8位,這就是爲什麼它沒有關係。 – idish

+2

我知道。如果你必須存儲8個布爾,你建議使用8個字節。我建議使用1個字節,如01010101 - 然後OP可以使用內存的八分之一。當然,檢索一個特定的值稍微複雜一點,但當然可能。 – KingCronus

1

可能你需要BitArray,序列號爲10

+0

bool []和BitArray之間的區別是什麼? –

+1

@StavAlfi:BitArray對每個值使用一個**位**,而對每個值使用一個**字節**。 – Tigran

0

bool[]會做的伎倆......如果你的數字其實只是「標誌」而不是實數。

EnumFlags屬性結合使用是另一種選擇。這將允許你爲兩個布爾值都有一個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!"); 
相關問題