2012-03-08 5 views
0

PHPコードからDelphiへの変換を探しています。現在、私はPHPコードでIsset()関数を使って処理するときに立ち往生しています。下のコードをDelphiに変換する方法はありますか?delphiでisset()を使用する方法

+0

これを実装するためにレコードの配列を組み合わせる必要がありますか? – akunyer

+1

辞書を使用する必要があるようです。 –

+0

ジェネリックであるかどうかを知るために、使用しているDelphiのバージョンを投稿してください。たぶん誰かがコードを書く時間を見つけるだろうが、ジェネリック医薬品が利用できるかどうかわからなくても、誰もベンチャーになることはないだろう。 –

答えて

0
$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']++; 
     } 
    } 

PHPアレイはdocumentation、順序付けられたリストとして、またはハッシュマップ(辞書)として機能フリーサイズのデータ​​構造によれば、です。 Delphiには同様のビルトインデータ構造がありません。ベクトル(順序付きリスト)ビヘイビア、またはハッシュマップ/辞書ビヘイビアのいずれかしか取得できません。また、ジェネリックスを導入したバージョンであるため、辞書の動作はDelphi 2009+で簡単にアクセスできます。

insetタイプの操作で使用できる使いやすいデータ構造は、TStringListです(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; 

もちろんこれは完全な回答ではありませんが、始めてみるべきです。

+0

'TStringList'は2つのパラメータを取る' Add() 'メソッドを持っていません。代わりに、L.Add( 'doc1 =' + SomeData) 'または' L.Values ['doc1']:= SomeData'を使用し、 'L.IndexOfName()'を使用する必要があります。 –

関連する問題