Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Определение индекса массива


Автор: VSH 11.9.2003, 11:47
Простейшая вроде функция (по значению найти индекс массива), а найти не могу. Например в басике была ArrayGetIndex. Что в Delphi?

Автор: <Spawn> 11.9.2003, 12:22
А что мешает ее самому сделать?
Вот поэксперементируй:

Код
type
TDataType=(dtByte,dtWord,dtInteger);

var
 Form1: TForm1;

implementation

{$R *.dfm}

function ArrayGetIndex(Arr:Pointer;Value, ArrLength:integer;DataType:TDataType):Integer;
var
i:integer;
begin
Result:=-1;
for i:=0 to ArrLength-1 do
 case DataType of
   dtByte:
     begin
      if PByte(Arr)^=Value then
       begin
        Result:=i;
        Exit;
       end;
      Inc(PByte(Arr));
     end;
   dtWord:
     begin
      if PWord(Arr)^=Value then
       begin
        Result:=i;
        Exit;
       end;
      Inc(PWord(Arr));
     end;
   dtInteger:
     begin
      if PInteger(Arr)^=Value then
       begin
        Result:=i;
        Exit;
       end;
      Inc(PInteger(Arr));
     end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ByteArr:array[0..2] of Byte;
WordArr:array[0..3] of Word;
IntArr:array[0..1] of Integer;
begin
ByteArr[0]:=10;
ByteArr[1]:=11;
ByteArr[2]:=15;
ShowMessage(Format('Индекс равен %d',[ArrayGetIndex(@ByteArr,15,3,dtByte)]));
WordArr[0]:=100;
WordArr[1]:=1000;
WordArr[2]:=10000;
WordArr[3]:=21746;
ShowMessage(Format('Индекс равен %d',[ArrayGetIndex(@WordArr,100,4,dtWord)]));
IntArr[0]:=2134777;
IntArr[1]:=$FFFFFFFF;
ShowMessage(Format('Индекс равен %d',[ArrayGetIndex(@IntArr,$FFFFFFFF,2,dtInteger)]));
end;

end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)