这个问题可能看起来有点晦涩难懂,但我会尝试用外行的话来分解它。
假设我有一个包含 24 个Byte
值的数组,仅包含0
or 1
:
011000100000001000000111
该数组在逻辑上分为每组四个值的组,这给了我们:
0110 0010 0000 0010 0000 0111
现在,我想数一数,有多少后续组将至少一个值设置为1
. 在我提供的示例中,我们有2
后续组。
我应该如何以编程方式进行?
基于 Arnaud 的回答,它有正确的想法,但实际上并没有按照 OP 的要求做:
function CountNonNullGroupSequenceLength(Values: PByte; ValuesCount: integer): integer;
var Groups: PIntegerArray;
i, counter: integer;
begin
Groups := Values;
result := 0;
counter := 0;
for i := 0 to (ValuesCount shr 2)-1 do
if Groups[i]<>NULLGROUP then
inc(counter)
else begin
result := max(result, counter);
counter := 0;
end;
result := max(result, counter);
end;
确保放入Math
您的使用列表,以便您可以获得该Max
功能。
由于一个组是 4 个字节,这就像将 4 个字节类型转换为一个整数。
例如:
const
NULLGROUP = 0;
function CountNonNullGroups(const Values: TByteArray): integer;
var Groups: TIntegerArray absolute Values;
i: integer;
begin
result := 0;
for i := 0 to (length(Values) shr 2)-1 do
if Groups[i]<>NULLGROUP then
inc(result);
end;
或者用指针:
function CountNonNullGroups(Values: PByte; ValuesCount: integer): integer;
var Groups: PIntegerArray;
i: integer;
begin
Groups := Values;
result := 0;
for i := 0 to (ValuesCount shr 2)-1 do
if Groups[i]<>NULLGROUP then
inc(result);
end;