在 C# 中的位数组中搜索

use*_*938 1 c# arrays search loops

如果有两个数组,第一个数组大小为 100 位,第二个数组大小为 32 位,我想在第一个数组 100 位中搜索 32 位数组

BitArray bits = new BitArray(100);  
BitArray bitss = new BitArray(32); 


bitss.Set(16,true);
bitss.Set(25,true);
bitss.Set(26,true);
bitss.Set(28,true);
bitss.Set(29,true);
bitss.Set(31,true);

for (int i = 0; i < (bits.Length)-1;i++ )

if ((bits[i] == bitss[0] &&
    bits[i + 1] == bitss[1] &&
    bits[i + 2] == bitss[2] &&
    bits[i + 3] == bitss[3] &&
    ...
    bits[i + 31] == bitss[31]))

    Console.WriteLine("Found");
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法在 C# 中不使用( if 和 == )在位数组中搜索位数组

Mar*_*zek 5

使用LINQ怎么样?

for(int i = 0; i < bits.Length - bitss.Length; i++)
{
    if (bits.Cast<bool>().Skip(i).Take(bitss.Length).SequenceEqual(bitss.Cast<bool>()))
        Console.WriteLine("Found!");
}
Run Code Online (Sandbox Code Playgroud)

但只是为了说明:它会比使用简单for循环慢一点!. 有点我根本不在乎。

  • 那会使“BitArray”变得多余..那为什么不创建一个 bool 列表..如果他将有 1000 个 bool 将 BitArray 转换为 bool 的成本会很高.. (2认同)