Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

2мерный стринговый массив


margel ©   (2004-11-07 22:20:00) 

Здравствуйте мастера!
Подскажите пожалуйста такой вопрос, как сделать такую вещь, создать 2х мерный массив, и наполнить его любыми стринговыми символами, а потом вернуть любой символ 2го столбца, относительно первого. Сколько не делаю, все ошибка в блоке таком то .. :(
Т.е.

function return_mass(a:integer): string;
var
i: integer;
mass: array of array of string;
begin
SetLength(mass, 2, 200);
for i:=1 to 200 do
 begin
  mass[1,i]:=IntToStr(i);          
  mass[2,i]:=IntToStr(Random(100))
 end;
Result:=mass[2,a];                
end;

procedure Tfm.Button1Click(Sender: TObject);
begin
 Showmessage(return_mass(15));
end;


И еще, вопрос, из первого, как наполнить массив не в цикле, а в ручную, в теле этой же ф-и, т.е.
1 - 5455
2 - 9998
3 - 4566
4 - 6878
....
Тоже с этим разобраться не могу, в PHP это элементарно реализуется, а тут прямо, с 5 вечера сижу, 5й час :(
Заранее всем спасибо.


KilkennyCat   (2004-11-08 11:41:00) [1]


> margel   (08.11.04 11:35) [9]


конечно, можно. Просто объявить его глобально, а не в функции. Если же он вообще очень редко меняется, то имеет смысл его забить в файл данных или ресурс, а в программе предусмотреть только возможность изменения.


margel   (2004-11-08 11:35:00) [2]

KilkennyCat ©   (08.11.04 11:17)
Да, спасибо, но тут слова для теста, реально, слова другие и совсем без цифр. А вот вопрос, можно ли в функции отсавить только поиск в массиве, а сам массив вынести в др. место? Я бы вынес в OnCreate формы, но сам этот модуль реализован в отдельном юните, и OnCreate нет...
Сейчас получается, при каждом обр. к ф-и я определяю весь массив заново, хотя его достаточно вбить 1 раз, при загрузке приложения и все...


KilkennyCat   (2004-11-08 11:17:00) [3]

mass[1,1]:='ee1';  mass[2,1]:='rr1';
mass[1,2]:='ee2';  mass[2,2]:='rr2';
mass[1,3]:='ee3';  mass[2,3]:='rr3';
mass[1,100]:='ee100';  mass[2,100]:='rr100';
mass[1,177]:='ee177';  mass[2,177]:='rr177';

я бы это заменил на

for i := 1 to 1000 do begin
 mass[1,i] := 'ee'+inttostr(i);
 mass[2,i] := 'rr'+inttostr(i);
end;


margel   (2004-11-08 11:10:00) [4]

Спасибо за ответы!
Хочу сделать ф-ю, возвращающую одно значение, относительно другого. Т.е. есть "таблица", в 2 колонки. Строк до 1000 и чуть более.
Сейчас, с вашей помощью сделал так, и все работает, но реализация, конечно, оставляет желать лучшего  :)


function return_mass(a:string): string;
var
i: integer;
mass: array[1..2,1..200] of string;
begin
mass[1,1]:='ee1';  mass[2,1]:='rr1';
mass[1,2]:='ee2';  mass[2,2]:='rr2';
mass[1,3]:='ee3';  mass[2,3]:='rr3';
mass[1,100]:='ee100';  mass[2,100]:='rr100';
mass[1,177]:='ee177';  mass[2,177]:='rr177';  //и так может до 1000 строк :(

for i:=1 to 200 do
 if a=mass[1,i]
   then
    begin
     Result:=mass[2,i];
     break;
    end
   else
    Result:='No return';

end;

procedure Tfm.Button1Click(Sender: TObject);
begin
 Showmessage(return_mass('ee177'));  //вернет "rr177"
end;


KilkennyCat   (2004-11-07 22:37:00) [5]

ну вот, опять опередили...


KilkennyCat   (2004-11-07 22:36:00) [6]

я бы не так делал.
1) если данные - цифры, пусть массив и будет integer, преобразование делать при уже дальнейшем использовании.
2) mass[1,i]:=IntToStr(i); - возможно, лишнее, если потом не подрезумевается перетасовка элементов массива, с сохранением информации о порядковом номере.

а ошибка простая - SetLength(mass, 2, 200) делает массив [0..1, 0..199]


GuAV   (2004-11-07 22:33:00) [7]

margel   (07.11.04 22:20)
for i:=1 to 200 do
begin
 mass[1,i]:=IntToStr(i);          
 mass[2,i]:=IntToStr(Random(100))


У дин массивов первый элемент 0.
Т.е.
0 to 1999
а лучше
Low(mass) to High(mass)


YurikGL   (2004-11-07 22:27:00) [8]

Кстати, у меня такое чувство, что TStringList тебе больше подойдет...

Какая задача стоит то?


YurikGL   (2004-11-07 22:24:00) [9]


> margel   (07.11.04 22:20)  

Не проще

> mass: array of array of string;
-> mass array[1..2,1..200] of string?


margel   (2004-11-07 22:21:00) [10]

Скажу ещё, массив обыкновенный, 2 столбика, и 200 строчек. (в данном примере)


Наверх

Титульная страница Поиск, карта сайта Написать письмо