Как использовать isset () в Delphi - PullRequest
0 голосов
/ 08 марта 2012

Я ищу преобразование из кода PHP в Delphi.В настоящее время я застрял при работе с функцией Isset () в коде PHP.Есть ли способ, как я могу преобразовать приведенный ниже код в Delphi?

$collection = array(
'doc1' =>'php powerbuilder',
'doc2' =>'php visual'); 
$dictionary = array();
$docCount = array();    
foreach ($collection as $docID => $doc) {
        $doc = strtolower($doc);
        $terms = explode(' ', $doc);
        $docCount[$docID] = count($terms);
        foreach ($terms as $term) {
            if (!isset($dictionary[$term])) {
                $dictionary[$term] = array('df' => 0, 'postings' => array());
            }

            if (!isset($dictionary[$term]['postings'][$docID])) {
                $dictionary[$term]['df']++;
                $dictionary[$term]['postings'][$docID] = array('tf' => 0);
            }
            $dictionary[$term]['postings'][$docID]['tf']++;
        }
    }

1 Ответ

0 голосов
/ 08 марта 2012

Массивы PHP, согласно документации , представляют собой единую структуру данных, подходящую для всех, которая работает как упорядоченный список или как хэш-карта (словарь).Delphi не имеет аналогичной встроенной структуры данных, вы можете получить только векторное (упорядоченный список) поведение или поведение хэш-карты / словаря.А поведение словаря легко доступно только в Delphi 2009+, потому что именно в этой версии представлены Generics.

Простая в использовании структура данных, которая доступна в Delphi 2007 и может использоваться для операций типа insetTStringList, в режиме Sorted := True.Но это не настоящий словарь, это просто отсортированный список строк, где каждая строка может иметь значение, связанное с ней.Вы бы использовали это так:

procedure Test;
var L: TStringList;
begin
  L := TStringList.Create;
  try
    L.Sorted := True; // make the list "Sorted" so lookups are fairly fast
    L.AddObject('doc1', SomeData); // SomeData can't be string, it needs to be TObject descendant
    L.AddObject('doc2', SomeOtherData);
    if L.IndexOf('doc3') = -1 then // this is equivalnt to the `inset` test
    begin
      // doc3 is not in list, do something with it.
    end;
  finally L.Free;
  end;
end;

Это, конечно, не полный ответ, но вам следует начать.

...