나는 그 방법을 찾지 못했습니다.
C#에서는 공용 메서드를 인스턴스화 된 클래스에 "추가"하기 위해 확장 메서드 ([1] 참조)를 사용할 수 있습니다.
이 경우 당신은이 작업을 수행 할 수 있습니다
네임 스페이스에 유래 당신은 여러 매칭 알고리즘을 찾을 수 있습니다
{ 정적 클래스 프로그램 {
public static bool Find(this System.Collections.BitArray text, System.Collections.BitArray pattern)
{
//... implement your search algorithm here...
}
static void Main(string[] args)
{
System.Collections.BitArray bitsarr = new System.Collections.BitArray(150);
bool result = bitsarr.Find(new System.Collections.BitArray(new bool[]{true, true, false, true}));
Console.WriteLine("Result: {0}", result);
}
}
} net,이 답변의 맨 아래에 두 개의 링크 [2,3]를 추가했습니다.
특별한 경우에 검색된 문자열이 32 비트 인 경우 Dömölki- (Baeza-Yates) -Gonnet 알고리즘 [4,5,6,7]을 사용하는 것이 좋습니다.
가능한 문자 집합에는 2 개의 요소 (0과 1)가 포함되어 있으므로이 수정은 32 비트의 긴 패턴을 검색하는 경우에만 사용할 수 있습니다.
네임 스페이스에 유래 { 정적 클래스 프로그램 {
public static bool IsFound(this System.Collections.BitArray text, System.Collections.BitArray pattern)
{
uint B = 0;
for (ushort i = 0; i < pattern.Length; i++)
{
if (pattern[i])
{
uint num = 1;
B |= num << i;
}
}
return IsFound(text, B);
}
public static bool IsFound(this System.Collections.BitArray text, uint B)
{
uint nB = ~B;
uint D = 0;
const uint end = ((uint)1) << 31;
for (int i = 0; i < text.Length; i++)
{
uint uD = (D << 1) + 1;
D = uD & (text[i] ? B : nB);
if ((D & end) > 0)
{
return true;
}
}
return false;
}
static void Main(string[] args)
{
System.Collections.BitArray bitsarr = new System.Collections.BitArray(150);
//Tests:
bitsarr[0] = true;
bitsarr[1] = true;
bitsarr[2] = false;
bitsarr[3] = true;
bitsarr[50] = true;
bitsarr[51] = true;
bitsarr[52] = true;
bitsarr[53] = false;
bitsarr[54] = false;
bool result = bitsarr.IsFound(new System.Collections.BitArray(new bool[]{true, true, false, true}));
Console.WriteLine("Result: {0}, expected True", result);
result = bitsarr.IsFound(new System.Collections.BitArray(new bool[] { true, true, true, true }));
Console.WriteLine("Result: {0}, expected False", result);
result = bitsarr.IsFound(new System.Collections.BitArray(new bool[] { true, true, true, false }));
Console.WriteLine("Result: {0}, expected True", result);
result = bitsarr.IsFound(new System.Collections.BitArray(new bool[] { false, true, true, true }));
Console.WriteLine("Result: {0}, expected True", result);
result = bitsarr.IsFound(new System.Collections.BitArray(new bool[] { false, true, true, true }));
Console.WriteLine("Result: {0}, expected True", result);
Console.ReadKey();
}
}
}
참고 : 추가 검사가 필요합니다.
당신은 정말 "검색 비트"에 의해 당신이 무슨 뜻인지 불분명으로 –
는 {00000000000000000000000110110110가}이 내가 원하는 조금있다이 질문을 명확히 할 필요가 (내가 10 평판을 필요로하기 때문에, 여기에 링크를 추가 할 수 없습니다) 검색하려면 – user2898387