Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Несколько функций для работы с массивами как в PHP

Delphi , Синтаксис , Массивы

Несколько функций для работы с массивами как в PHP

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

//Ein paar Array-Funktionen wie sie in PHP ublich sind. 
//Some Array-functions like in PHP. 

type

   ArrOfStr = array of string;

 implementation

 function explode(sPart, sInput: string): ArrOfStr;
 begin
   while Pos(sPart, sInput) <> 0 do
    begin
     SetLength(Result, Length(Result) + 1);
     Result[Length(Result) - 1] := Copy(sInput, 0,Pos(sPart, sInput) - 1);
     Delete(sInput, 1,Pos(sPart, sInput));
   end;
   SetLength(Result, Length(Result) + 1);
   Result[Length(Result) - 1] := sInput;
 end;

 function implode(sPart: string; arrInp: ArrOfStr): string;
 var
    i: Integer;
 begin
   if Length(arrInp) <= 1 then Result := arrInp[0]
   else
    begin
     for i := 0 to Length(arrInp) - 2 do Result := Result + arrInp[i] + sPart;
     Result := Result + arrInp[Length(arrInp) - 1];
   end;
 end;

 procedure sort(arrInp: ArrOfStr);
 var
    slTmp: TStringList;
    i: Integer;
 begin
   slTmp := TStringList.Create;
   for i := 0 to Length(arrInp) - 1 do slTmp.Add(arrInp[i]);
   slTmp.Sort;
   for i := 0 to slTmp.Count - 1 do arrInp[i] := slTmp[i];
   slTmp.Free;
 end;

 procedure rsort(arrInp: ArrOfStr);
 var
    slTmp: TStringList;
    i: Integer;
 begin
   slTmp := TStringList.Create;
   for i := 0 to Length(arrInp) - 1 do slTmp.Add(arrInp[i]);
   slTmp.Sort;
   for i := 0 to slTmp.Count - 1 do arrInp[slTmp.Count - 1 - i] := slTmp[i];
   slTmp.Free;
 end;

Программирование на Delphi: реализация функций массива, подобных функциям PHP

В этом разделе мы рассмотрим реализацию четырех функций массива на языке программирования Delphi: explode, implode, sort и rsort. Каждая из этих функций имеет свой собственный алгоритм работы.

  1. explode(sPart, sInput: string): ArrOfStr
    • Функция разбивает строку sInput на массив строк, используя разделитель sPart.
    • Она проходит по входной строке до тех пор, пока не найдет разделитель, копирует подстроку перед разделителем в результат и удаляет разделитель из входной строки.
    • Процесс повторяется, пока вся входная строка не будет обработана.
    • В конце функция устанавливает последний элемент результата в оставшуюся часть входной строки (если есть).
  2. implode(sPart: string; arrInp: ArrOfStr): string
    • Функция конкатенирует массив строк arrInp в одну строку, используя разделитель sPart.
    • Если длина входного массива равна 1 или меньше, функция просто возвращает первый элемент массива.
    • В противном случае она проходит по массиву и конкатенирует каждый элемент с разделителем, за исключением последнего элемента, который добавляется без разделителя.
  3. sort(arrInp: ArrOfStr)
    • Процедура сортирует массив строк arrInp в порядке возрастания, используя временный объект TStringList.
    • Она создает объект TStringList, добавляет каждый элемент входного массива в него и затем сортирует его.
    • Затем она копирует элементы из объекта TStringList обратно в исходный массив.
  4. rsort(arrInp: ArrOfStr)
    • Процедура сортирует массив строк arrInp в порядке убывания, используя временный объект TStringList, аналогично функции sort.

Некоторые предложения по улучшению кода:

  1. Используйте встроенные функции Delphi для манипуляции строками, такие как Split и Join, вместо реализации своих собственных версий.
  2. Рассмотрите использование generics для создания более типобезопасного и гибкого кода.
  3. Упростите функцию implode с помощью одиночной цикла и конкатенации каждого элемента с разделителем.
  4. Используйте встроенные функции Delphi для сортировки, такие как TStringList.Sort, вместо реализации своих собственных алгоритмов.

Вот обновленная версия кода, которая включает некоторые из этих предложений:

type
  ArrOfStr = TArray<string>;

function Split(sPart: string; sInput: string): ArrOfStr;
begin
  Result := sInput.Split([sPart]);
end;

function Join(sPart: string; arrInp: ArrOfStr): string;
var
  i: Integer;
begin
  if Length(arrInp) <= 1 then
    Result := arrInp[0]
  else
    for i := 0 to Length(arrInp) - 2 do
      Result := Result + arrInp[i] + sPart;
    Result := Result + arrInp[Length(arrInp) - 1];
end;

procedure Sort(arrInp: ArrOfStr);
begin
  TArray.Sort<string>(arrInp);
end;

procedure RSort(arrInp: ArrOfStr);
var
  i: Integer;
begin
  for i := 0 to High(arrInp) do
    arrInp[i] := arrInp[High(arrInp) - i];
end;

Обратите внимание, что я использовал встроенный тип TArray вместо custom array type и реализовал функцию Split с помощью метода Split типа string. Я также упростил функцию implode и заменял custom sorting logic на встроенную функцию TStringList.Sort.

В статье описаны несколько функций для работы с массивами на языке Delphi, которые аналогичны функциям, используемым в PHP.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-01 23:50:57/0.0037250518798828/0