如何在不丢失数据的情况下减小整数数组(带二进制数据[0,1])的长度?

时间:2011-02-06 10:31:19

标签: c#

我有一个长度为900的整数数组,只包含二进制数据[0,1]。 我想缩短数组的长度而不会丢失二进制数据格式(原始数组值)。

是否可以在C#中将900的数组长度缩短为10或20长度?

4 个答案:

答案 0 :(得分:5)

Bitarray类将为你提供几乎1/3的int数组长度。

答案 1 :(得分:1)

您实际上可以对位应用一些压缩然后存储它。如果只有1和0,运行长度编码可能有助于在非最坏的情况下大幅减小大小。

Run length encoding - Wiki article

答案 2 :(得分: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个元素。现在你可以用字符串

转换它

答案 3 :(得分:0)

实际上,你有一个900位的二进制整数。有很多方法可以保存“数字”,具体取决于您对它的要求和速度。

问问自己:

  • 我是否需要快速设置功能(arr[n] = something
  • 我需要快速检索功能(val = arr [n])
  • 我需要某种迭代,例如找到下一个n,其中arr [n]是1

等等。

然后,再次询问或修改原始问题。

否则,BitArray

编辑:

因为我们发现了一些东西(一点点),我建议你自己开一个班。

类将有一个容器,如byte []和方法,用于在某个位置设置和取消设置项目。

从两个数组中检查公共1将简单到基于字节到数字的&& -ing数组。