問題タブ [tobjectlist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - TObjectList からオブジェクトを抽出する
OwnsObjects = true の TObjectList があります。かなりの数のオブジェクトが含まれています。ここで、インデックス Idx のオブジェクトを解放せずに、そのリストから削除したいと考えています。
抽出方法は唯一のオプションですか?
ExtractedObject := TheList.Extract(TheList[Idx]);
他のすべてのメソッドは、オブジェクトを解放するようです。オブジェクトのインデックスを既に知っているので、毎回線形検索を行わない、もう少し効率的なものを探しています。過負荷のようなもの...
ExtractedObject := TheList.Extract(Idx);
...存在しません。
delphi - Delphi: ジェネリックと TObjectList
私は次のようなクラスを作成しました
今、FillArray(Content);
できれば一度実装する必要がある method が必要です。つまり、オーバーロードはありません。これはジェネリックを使用して可能であると信じていますが、実際に実装するにはこれらの獣に慣れていません。誰か手がかりを持っていますか?前もって感謝します!
delphi - Delphi:TObjectListの使用方法?
一般的なDelphi2009の使用方法を理解する必要がありますTObjectList
。私の非TObjectList
試みは次のように見えました
ここでは、同じコンストラクターTList1
をTList2
継承しconstructor TParent.Create(Key: string; Value: string);
ます。ただし、専門分野が異なるため(たとえば、プライベートフィールドが異なるため)、同じタイプにはなりません。したがって、ほぼ同じ2つの塗りつぶしメソッドを作成する必要があります。
全体でwithをFillArray(List: Array of TList2; Source: TSource);
置き換えることを除いて、同一です。私が理解している限り、これは単一の塗りつぶし方法を使用することでうまく回避できます。まだ、私はこれについてどうやって行くのか見当がつかない。誰かがこれについていくつかの良い指針を持っていますか?ありがとう!TList1
TList2
TObjectList
delphi - TObjectlist の結合について
私は正しい方向に微調整する必要があると思います:
同じデータ型の 2 つの Tobjectlist があり、これらを新しいリストに連結して、list1 を (変更せずに) コピーし、次に list2 を (逆に) コピーしたいと考えています。
Delphi には、2 つの Tobjectlist を 1 つにマージする組み込み関数がありますか?
delphi - Delphi の問題: Tobjectlist のソート<>
組み込みの sort メソッドを使用して、一般的な tobjectlist をソートしたいと考えています。
これが私がすることです:
私の Comparer 関数は次のようになります。
仕様によると、このように動作するはずです。
コンパイラ エラー E2250 No overloaded version of 'Sort' exist with these parameters が発生します(正確な表現は異なります。英語版以外の RAD Studio を使用しています)。
これが有効な Pascal ではない理由がわかりません。これについて共有できる洞察を持っている人はいますか?
delphi - Delphi: TObjectList から取得したオブジェクトを格納する正しい方法
もちろん、この例は単純化されていますが、基本的には、別のフォーム (frmSettings) をトリガーするメイン フォームがあります。
TSettings
設定を追跡するためにメインフォームで作成された私自身のオブジェクトです。
この新しく開いたフォーム (frmSettings)TMyObjectList
で、 の子孫である をフェッチしTObjectList
ます。でいっぱいTMyObj
です。
次にTListBox
、その TMyObjectList から値を入力します。
コード:
ポインターだけを保存するのは良い考えではないようです。設定フォームを再度トリガーすると、リストが再作成され、ユーザーが「キャンセル」を押しても元のオブジェクトが失われるためです。
したがって、すべてのプロパティを正しく取得するには、割り当てを使用して、コピーを保存する方が良いようです。そして、最初にオブジェクトが既にあるかどうかを確認します。
これらの2行を代わりにメソッドに移動する必要がありますSettings.AssignSelectedObj(aMyObj:TMyObj)
これは正しいように見えますか、それとも間違った方法で実装していますか? 多かれ少なかれ必要なものはありますか?
メモリリークやその他のトラブルに巻き込まれないように、より安全に感じるように、いくつかのガイドラインが必要です。
コードを少し確認する以外に、本当の問題は次のとおりです。これは、SelectedObject を設定クラスに格納する正しい方法ですか?
delphi - TObjectList.IndexOf に 1 つの関数を渡し、TObjectList.Sort に別の関数を渡すことはできますか?
要約:
TList.IndexOf (ユニット Classes.pas で定義された TList) は、含まれている項目を直線的に反復し、参照を比較します。TList.IndexOf (ユニット Generics.Collections.pas で定義された TList) も、含まれている項目を直線的に反復しますが、比較子を使用して項目が等しいかどうかを比較します。
TList.Sort と TList.Sort の両方で比較子を使用できます。
=================================================
次の単元で定義されている TForceList 型のインスタンスについては、次のように使用できます。
Value フィールドをソート基準として使用して QuickSort します。しかし、私が電話するとき
その ElementZ フィールドを比較基準、つまり関数として使用したいと考えていForceEqual
ます。どうすればこれを達成できるのだろうか?
PS: ジェネリック コレクションが使用されている場合は、使用できると思います
ユニット:
delphi - デバッグ時に非ジェネリック TObjectList の内容を調べる方法は?
要約:
1. LachlanG と Ken が指摘したように、デバッグ時の手動型キャスト。
2. Delphi 2010 以降に導入されたデバッガ ビジュアライザの概念を利用します。
3. 対応するジェネリックに切り替えます。
=========================================
たとえば、次のコードを見てください。
TestRegular
の最後と の最後にそれぞれブレークポイントが設定されている場合TestGenerics
、デバッグ インスペクターを介して一般的なリストの項目 (および項目の内容も) を確認できますが、マウスを変数の上に置いたときの通常の tobjectlist tmp
。通常の tobjectlist で同様のデバッグ時機能を実現する方法があるかどうか疑問に思っています。
arrays - How noticeable is the difference of performance among TList, TObjectList, and plain array, if it could be estimated?
*Summarization:
Please check the knowledgeable comments from the Delphi experts. Specifically for me, I would try to use old TList/TObjectList as David suggested, and use hard-cast and TObjectList.List property as A.Bouchez suggested. I will try TDynArray when refactoring in future.
=====================================================================
Say that I have a TAtom
class as defined in the following code. There are about hundreds
up to thousands
of TAtom instances at run time, stored in a dynamic array
for now. At run time, I need to do simple float math on TAtom.X/Y/Z
of all the existing TAtom instances more than 30
times per second.
Now, I need to add the ability of adding
, inserting
, deleting
of TAtom instances at run time. It seems that my choices are (1) request a big array; (2) stick to dynamic array and manually SetLength; (3) switch to regular TList; (4) switch to regular TObjectList.
I want to avoid (1) unless it is necessary, because I then have to change quite a lot function signatures. (2) looks not good either, because TList/TObjectList seems born for this task. However, because type-casting is needed using the regular TList/TObjectList, could some one comment on the possible performance hit? I mean, it would be best if the performance burden could be estimated before I rewrites the code. If the performance will drop noticeably, is there other technics that I could use?
Furthermore, I am wondering if there is performance difference between using TList and TObjectList?
delphi - DelphiTObjectListからオブジェクトを削除します
FileEventObjects := TObjectList.Create(True);
1つ以上のオブジェクトを含むTObjectリスト( )があります。オブジェクトは、処理されるまでリストにとどまる必要があります。(オブジェクトリストは、アプリケーションの期間中存在します。)
処理されたオブジェクトをリストから削除する方法が完全にはわかりません。
私がそうすると、オブジェクトは「解放」されますか?FileEventObjects.Delete(i)
動作中のTObjectListsの便利な例へのリンクはありますか?
よろしく、ピーター。