我有一個長度爲900的整數數組,它只包含二進制數據[0,1]。 我想縮短數組的長度而不會丟失二進制數據formate(原始數組值)。如何在不丟失數據的情況下減少整數數組的長度(二進制數據[0,1])?
在C#中可以將900的數組長度縮短爲10或20的長度嗎?
我有一個長度爲900的整數數組,它只包含二進制數據[0,1]。 我想縮短數組的長度而不會丟失二進制數據formate(原始數組值)。如何在不丟失數據的情況下減少整數數組的長度(二進制數據[0,1])?
在C#中可以將900的數組長度縮短爲10或20的長度嗎?
你實際上可以在位上應用一些壓縮,然後存儲它。如果它只有1和0,運行長度編碼可能有助於在非最糟糕的情況下大幅縮小尺寸。
Bitarray類會給你幾乎1/32的int數組長度。
這不起作用... 900/32仍然比10多得多。 – 2011-02-06 10:49:03
這是您在一般情況下可以達到的最佳狀態。你可以嘗試壓縮它,但這並不總是有幫助。 – CodesInChaos 2011-02-06 10:51:31
它不適合我的場景。我有很多長度爲900的數組,我必須將這些值保存在數據庫中。如果我保存原始數組或第1/32,它增加了我的數據庫的大小。其他方法? – mirfan00 2011-02-06 10:56:17
嘗試使用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元件。現在你可以將它轉換成字符串
實際上,你有一個900位數的二進制整數。有很多方法可以保持這個「數字」,具體取決於你想要什麼和有多快。
問自己:
arr[n] = something
)等等。
然後,再次詢問或修改您的原始問題。
否則,BitArray
編輯:
因爲我們發現了一些(略)我會建議使用您自己的類爲。
類將有一個容器,如byte []和方法來設置和取消設置某個位置上的項目。
檢查兩個數組中的常見1將如& &一樣簡單 - 在字節到字節的基礎上創建一個數組。
你是什麼意思的「短的長度」。你的意思是[truncate](http://www.thefreedictionary.com/truncate)? – 2011-02-06 10:49:35
我想要表示長度爲10或20的數組或長度爲900的數組。 – mirfan00 2011-02-06 11:00:53