標準を使用する場合の違いは何ですか
type
sl: TStringList
一般的なTListを使用する場合と比較して
type
sl: TList<string>
?
私が見る限り、どちらもまったく同じように動作します。
同じことをする別の方法ですか?
一方が他方よりも優れている状況はありますか?
ありがとう!
標準を使用する場合の違いは何ですか
type
sl: TStringList
一般的なTListを使用する場合と比較して
type
sl: TList<string>
?
私が見る限り、どちらもまったく同じように動作します。
同じことをする別の方法ですか?
一方が他方よりも優れている状況はありますか?
ありがとう!
TStringList は、ジェネリックが登場する前から Delphi で長い間使用されてきました。したがって、文字列の一般的なリストにはない便利な機能がいくつか構築されています。
ジェネリック バージョンは、String 型で機能する TList と同じ新しい型を作成するだけです。(.Add()、.Insert()、.Remove()、.Clear()など)
TStringList には、基本的な TList タイプのメソッドと、.SaveToFile() や .LoadFromFile() など、文字列を操作するためのカスタム メソッドがあります。
下位互換性が必要な場合は、TStringList を使用することをお勧めします。
文字列のリストを操作するための拡張機能が必要な場合は、TStringList が最適です。任意の型のリストを操作する基本的なコーディングの基礎がある場合は、おそらく TStringList から目を離す必要があります。
後方互換性が必要な場合は TStringList を使用し、前方互換性が必要な場合 (おそらく、文字列のリストを将来 Int64 のリストに変更するオプション)、TList を使用します。
メモリの観点から見ると、TStringList のメモリ使用量は、TObject ポインタのサイズが各項目に追加されると増加します。TList のメモリ使用量は、各項目に追加されるポインターのサイズによって増加します。検索、置換、並べ替え、または連想操作を行わずに文字列の配列だけが必要な場合は、動的配列 (文字列の配列) で十分です。これには、TStringList または TList の適切なメモリ管理が欠けていますが、理論的には使用するメモリが少なくなるはずです。
TStringlist は、Delphi の非常に用途の広いクラスの 1 つです。私はその Objects プロパティを何度も使用 (そして悪用 ;-) しました。区切られた文字列を TMemo や類似のコントロール (TListBox、TComboBox など) のようなコントロールにすばやく変換することは非常に興味深いことです。
TStringList はポインターを処理する必要なく私のニーズを満たしたため (Tlist は Pointer 値のリストであるため)、TList はあまり好きではありません。
編集: TList(ポインターのリスト) と TList (文字列の一般的なリスト) を混同しました。そのために残念。私の主張は次のとおりです。TStringList は単なる文字列のリストではありません。
TStringList はあまりにも長い間使用されており、Rob Kennedy によって言及されている多くの利点があります。
それを文字列とオブジェクトのペアとして使用することの唯一の本当の欠点は、(読み取り時に) このリストに期待および格納されている実際の型にオブジェクトをキャストする必要があることです。 TStringList の汎用バージョンを含む VCL ライブラリ。
この制限を克服するために、私はそのようなリストを内部使用のために実装し、ほぼ 3 年間その目的を果たしたので、今日共有することにしました: https://github.com/t00/deltoo#tgenericstringlist
1 つの重要な注意点 - ほとんどの場合、オブジェクトがリストに格納されている場合、オブジェクトが最もアクセスされるプロパティでもあるため、デフォルト プロパティが Strings から Objects に変更されます。