计算数组中后续组的数量

时间:2012-04-25 16:17:21

标签: arrays delphi

这个问题可能看起来有点模糊,但我会尝试用非专业人的术语来分解。

假设我有24个Byte值的数组,仅包含01

011000100000001000000111

数组在逻辑上被划分为每组四个值的组,这给了我们:

0110 0010 0000 0010 0000 0111

现在,我想算一下,有多少后续群组至少一个值设置为1。在我提供的示例中,我们有2个后续组。

我应该如何以编程方式进行此操作?

2 个答案:

答案 0 :(得分:5)

以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功能。

答案 1 :(得分:2)

由于一个组是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;