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


Автор: JSinx 20.1.2008, 20:05
Столкнулся с небольшой проблемой.
Перебираю массив с помощью for in, как узнать на каком номере записи я нахожусь?
Код

var
  i : integer;
  myArray : array[1..10] of integer;
begin

for i in myArray do  i := i + 10;



В этом случае можно при каждом переборе увеличивать на единицу другую переменную.
У меня немного посложней ситуация.
Код

type
  tListName = ( marusa, lena, kata )
  tParams = record
    name : string;
    phone : string;
  end;

  tHumList : array[ tListName ] of tParams;

var
  i : tParams;
  myArray : tHumList;

function ReturnIndex( value : string ) :  tListName ;
begin
  for i in myArray do
    if i.name=value then Result :=****(тут должен быть индекс)
    
end


Автор: Alexeis 20.1.2008, 20:14
  Так и i и есть индекс, на записи с индексом I. 

Автор: ivan219 20.1.2008, 21:42
Цитата(JSinx @  20.1.2008,  20:05 Найти цитируемый пост)
for i in myArray do  i := i + 10;

А это правильный синтаксис smile 

Автор: mr.Anderson 20.1.2008, 21:53
ivan219, синтаксис-то нормальный, я только сильно сомневаюсь, что все это пройдет без предупреждений в делфи (идет вмешательство в переменную цикла).

Автор: JSinx 20.1.2008, 22:21
Цитата(Alexeis @ 20.1.2008,  20:14)
1) Так и i и есть индекс, на записи с индексом I.

2) А это правильный синтаксис.


1) Нет, i - это значение

2) Согласен, что к i прибавлять нельзя, но суть то не в этом!!!! Подставьте туда любую другую строчку.

Вот вам рабочий код:

Код

const
  myArray : array[1..5] of integer = (4,5,2,3,1);

var
  i, j : integer;
begin
  j := 0;
  for i in myArray do
  begin
    StringGrid1.Cells[j,0] := IntToStr( i );
    StringGrid1.Cells[j,1] := IntToStr( j );
    inc(j);
  end;


Что мы увидим в стригриде:
Первая строчка будет: 4, 5, 2, 3, 1.
Вторая: 0, 1, 2, 3, 4

Автор: ivan219 20.1.2008, 22:52
Цитата(mr.Anderson @  20.1.2008,  21:53 Найти цитируемый пост)
синтаксис-то нормальный

А вот Delphi7 на это for i in myArray do ругается матом smile 

Автор: THandle 20.1.2008, 22:56
ivan219, насколько помню цикл for..in..do был введен в язык Object Pascal только в Delphi 2005.

Автор: JSinx 20.1.2008, 23:02
Цитата(THandle @ 20.1.2008,  22:56)
ivan219, насколько помню цикл for..in..do был введен в язык Object Pascal только в Delphi 2005.

Да, в 2005 тока появилось.
Очень удобная весчь, часто пользуюсь в lua, но без узнавания индекса теряет свою ценность примерно наполовину.

Видимо придется пока делать через заднее место, глядишь, может и ответ получу smile

Автор: Snowy 22.1.2008, 15:22
Сделай не record, а класс.
Прикрути к нему свой enumerator и получишь любой желаемый функционал.

Автор: JSinx 22.1.2008, 17:32
Цитата(Snowy @ 22.1.2008,  15:22)
Сделай не record, а класс.
Прикрути к нему свой enumerator и получишь любой желаемый функционал.

Попробую smile

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