2011-02-06 56 views
1

我有一個長度爲900的整數數組,它只包含二進制數據[0,1]。 我想縮短數組的長度而不會丟失二進制數據formate(原始數組值)。如何在不丟失數據的情況下減少整數數組的長度(二進制數據[0,1])?

在C#中可以將900的數組長度縮短爲10或20的長度嗎?

+1

你是什麼意思的「短的長度」。你的意思是[truncate](http://www.thefreedictionary.com/truncate)? – 2011-02-06 10:49:35

+0

我想要表示長度爲10或20的數組或長度爲900的數組。 – mirfan00 2011-02-06 11:00:53

回答

1

你實際上可以在位上應用一些壓縮,然後存儲它。如果它只有1和0,運行長度編碼可能有助於在非最糟糕的情況下大幅縮小尺寸。

Run length encoding - Wiki article

5

Bitarray類會給你幾乎1/32的int數組長度。

+0

這不起作用... 900/32仍然比10多得多。 – 2011-02-06 10:49:03

+2

這是您在一般情況下可以達到的最佳狀態。你可以嘗試壓縮它,但這並不總是有幫助。 – CodesInChaos 2011-02-06 10:51:31

+0

它不適合我的場景。我有很多長度爲900的數組,我必須將這些值保存在數據庫中。如果我保存原始數組或第1/32,它增加了我的數據庫的大小。其他方法? – mirfan00 2011-02-06 10:56:17

0

嘗試使用System.Collections.BitArray

下面是示例代碼:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      System.Collections.BitArray bits = new System.Collections.BitArray(900); 

      // Setting all bits to 0 
      bits.SetAll(false); 

      // Here Im setting 21st bit in array 
      bits[21] = true; 
      // etc... 

      int[] nativeBits = new int[29]; 

      // Packing your bits in int array 
      bits.CopyTo(nativeBits, 0); 

      // This prints 2097152. this is 2^21 
      Console.WriteLine("First element is:"+nativeBits[0].ToString()); 
     } 
    } 
} 

nativeBits陣列由僅29元件。現在你可以將它轉換成字符串

0

實際上,你有一個900位數的二進制整數。有很多方法可以保持這個「數字」,具體取決於你想要什麼和有多快。

問自己:

  • 我需要快速設定功能(arr[n] = something
  • 我需要快速檢索功能(VAL =改編[N])
  • 我需要某種形式的迭代,例如找到下一個n爲哪個arr [n]是1

等等。

然後,再次詢問或修改您的原始問題。

否則,BitArray

編輯:

因爲我們發現了一些(略)我會建議使用您自己的類爲。

類將有一個容器,如byte []和方法來設置和取消設置某個位置上的項目。

檢查兩個數組中的常見1將如& &一樣簡單 - 在字節到字節的基礎上創建一個數組。

相關問題