Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#9

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 16:16
Zitat:
In dem Code, den du gepostet hast, steht aber schon vector<short>, oder?
richtig

Code:
vector<short> &A1, vector<short> &A2
Ja A1 und A2 sind short dienen aber nur dazu um das Array(Record) zu sortieren. (Nach welchen Kriterien muss ich noch nachfragen)

Siehe dazu nochmal zum besseren Verständnis.

Delphi-Quellcode:
function TSkinSpriteContainer.GetObjectOrder(hParent: HWND): Integer;
var
  gP, UB: Integer;
  K, Count: Integer;
  A1, A2: TArray<TgObj>;
  buffer: array [0 .. 2048] of char;
begin
  Count := 0;

  gP := gPropertyItem(hParent);
  if (gP > -1) then
  begin
    if (g_Prop[gP].Ordersize <> 0) then
    begin
      Result := gP;
      exit;
    end;
  end;

  UB := High(g_Obj);
  if (UB > 0) then
  begin
    SetLength(A1, UB);
    SetLength(A2, UB);

    for K := 0 to UB do
    begin
      if (g_Obj[K].Handle = hParent) then
      begin
        SetLength(A1, Count + 1);
        SetLength(A2, Count + 1);

        A1[Count].Order := g_Obj[K].Order;
        inc(Count);
      end;
    end;

    SortShortTagArray(A1, A2, Count);

    for K := 0 to Count do
      MoveMemory(@(buffer[K * sizeof(Short)]), @A2[K], sizeof(Short));

    FillChar(A1, sizeof(A1), 0);
    FillChar(A2, sizeof(A2), 0);

    if (gP < 0) then
    begin
      gP := High(g_Prop) + 1;
      SetLength(g_Prop, gP + 1);
    end;

    g_Prop[gP].Handle := hParent;
    MoveMemory(@g_Prop[gP].Order, @buffer[0], sizeof(buffer));
    g_Prop[gP].Ordersize := Count;
  end;
  Result := gP;
end;
eventuell liegt hier schon mein Denkfehler
A1, A2: TArray<TgObj>;

A1, A2: TArray<SmallInt>;
Dann habe ich aber keinen zugriff auf die Variablen des Record.
A1[Count].Order := g_Obj[K].Order;

gruss

Geändert von EWeiss (22. Nov 2017 um 16:20 Uhr)
  Mit Zitat antworten Zitat