使用されている Delphi のバージョン: 2007
こんにちは、
私はTecordの配列を持っています
TInfo = Record
Name : String;
Price : Integer;
end;
var Infos : Array of Tinfo;
配列をソートする方法を探していたところInfos
、賢い方法だと思われるものを見つけました。基本的に、配列の各セルへのポインターを追加する TList があります。次に、カスタムの並べ替え関数を使用してそれらを並べ替えます。次に、この TList を使用して、並べ替えられたセルを にTListView
設定OwnerData
して表示しtrue
ます。
var SortedInfo : TList;
...
function CompareInfo(Item1, Item2: Integer): Integer;
var
i, j : integer;
begin
i := Integer(Item1);
j := Integer(Item2);
Result := CompareText(Infos[i].Name, Infos[j].Name);
end;
...
for I := 0 to Length(Infos) - 1 do SortedInfo.Add(Pointer(I));
SortedInfo.Sort(@CompareInfo);
...
procedure InfoHandlerData(Sender: TObject; Item: TListItem);
begin
Item.Caption := Infos[Integer(SortedInfo[Item.Index])].Name;
Item.SubItems.Add(IntToStr(Infos[Integer(SortedInfo[Item.Index])].Price);
end;
ここで、ポインターを並べ替えたまま、セルを追加および削除できるようにしたいと考えています。さて、ここに私の問題があります。
- セルを追加するときは、呼び出してポインターのリスト全体を再ソートする必要があります
SortedInfo.Sort(@CompareInfo);
- セルを削除すると、TList を消去し、ポインターのリストを再構築して、再度並べ替える必要があります。
現在、私は膨大な数のセルを持っていないので、パフォーマンスの問題はありません。ただし、セルを削除するときにポインターを再構築し、配列が変更されるたびにすべてのポインターを並べ替えるのは、私には間違っているようです。私の問題がばかげているように見える場合は申し訳ありませんが、私は学ぼうとしています.
配列をソートしておく正しい方法はありますか? 新しいセルを「個別に」ソートする方法や、セルが削除されたときにポインターを有効に保つ方法がわかりません...