AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Arrays vergleichen\sortieren

Ein Thema von EWeiss · begonnen am 22. Nov 2017 · letzter Beitrag vom 30. Nov 2017
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: 2 Arrays vergleichen\sortieren

  Alt 23. Nov 2017, 20:35
Trotz alledem auch wenn einige denken (Uwe Rabe als Beispiel) das ich blöd wäre habe ich mit meiner alten Sprite Engine meinen Video Player fertig gestellt.
Zitat:
daß Du und Delphi einfach nicht füreinander geschaffen seid.
Das ich es mir jetzt etwas einfacher machen will nun da kann ich nur draus lernen.
Das Delphi nicht gleich C++ ist, ist mir auch bekannt.

Na was soll's. ich kann damit leben.
Wollte das nur gesagt haben.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#2

AW: 2 Arrays vergleichen\sortieren

  Alt 23. Nov 2017, 23:14
Trotz alledem auch wenn einige denken (Uwe Rabe als Beispiel) das ich blöd wäre
Habe ich nie behauptet! Das war lediglich ein wohlmeinender Kommentar auf deine Äußerungen:

Zitat:
langsam nervt Delphi nur noch
...
Ein char bleibt ein char egal ob in c++ oder Delphi, ein Array bleibt ein Array.
Warum macht der Compiler unter Delphi so einen Aufstand.
...
Also warum funktioniert es unter C++ und nicht mit Delphi.
...
Um so mehr ich mit C++ Arbeite um so mehr stelle ich fest wie verkorkst die Sprache Delphi(Compiler) eigentlich ist.

Solche Kommentare höre ich häufig von Leuten, die mit C++ gut zurecht kommen, aber halt mit Delphi ihre Probleme haben. Das liegt weder an C++ noch an Delphi noch an den Leuten, sondern einfach an der Kombination. Das macht diese Leute auch nicht blöd oder doof - das hat einfach was mit der Denkweise zu tun. Ich würde mich sicher genauso schwer tun, wenn ich mit C++ arbeitete. Deswegen muss ich diese Sprache ja nicht gleich für hirnrissig erklären. Wenn du eine Reaktion wie die meine nicht haben willst, dann halte dich doch einfach an dein eigenen Worte:
Zitat:
Jetzt keinen erneuten Hype um Delphi hier sachlich bleiben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: 2 Arrays vergleichen\sortieren

  Alt 23. Nov 2017, 23:19
Zitat:
Habe ich nie behauptet!
Aber es kam so rüber.

Zitat:
Wenn du eine Reaktion wie die meine nicht haben willst, dann halte dich doch einfach an dein eigenen Worte:
Ich denke auch, aber weist du das kam so abfällig herüber.. vielleicht solltest du deine Wortwahl auch einmal überdenken.

Nichts destotrotz hat sich erledigt und ich bin niemanden böse das er sich wehrt wenn es um sein geliebtes Delphi geht. (Ich werde es in der Zukunft unterlassen)
Ich bin kein Profi will das nochmal in den Raum stellen.

Zum Thema mich hat das nur mit dem MoveMemory geärgert das man hier hunderte von Konvertierungen machen muss
um am ende das gleiche Ergebnis zu bekommen wie unter den anderen Sprachen auch.

Dabei wie gesagt ist es eine einfach Win32 API wo man sich am ende auch nicht schlüssig ist
was denn nun MoveMemory oder CopyMemory wobei beides das gleiche ist.


gruss

Geändert von EWeiss (23. Nov 2017 um 23:27 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: 2 Arrays vergleichen\sortieren

  Alt 23. Nov 2017, 23:36
Ok das Problem hat sich erledigt.. SortShortTagArray aber noch nicht.
Wer vergleichen will.

Delphi-Quellcode:
function TSkinSpriteContainer.GetObjectOrder(hParent: HWND): Integer;
var
  gP, UB: Integer;
  K, Count: Integer;
  A1, A2: TArray<short>;
  // nur noch 512 Einträge zur Verfügung muss sehen ob ich das Array nicht wieder erhöhe.
  // 512 Objekte auf einer Form sind schnell erreicht.
  buffer: array [0 .. 1023] of Short;
begin

  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 // müsste eigentlich "-1" sein weil das Array in Delphi bei 0 anfängt. (Muss vorher noch prüfen welche Auswirkungen das hat)
  begin
    Count := 0; // hier eigentlich das gleiche -1
    SetLength(A1, UB + 1);
    SetLength(A2, UB + 1);

    for K := 0 to UB do // ist der höchste Array Index deshalb kein "UB - 1"
    begin
      if (g_Obj[K].Handle = hParent) then
      begin
        A1[Count] := (g_Obj[K].order);
        A2[Count] := (K);
        inc(Count);
      end;
    end;
    //ARRAY SORT A1() FOR Count, TAGARRAY A2();
    //SortShortTagArray (A1, A2, nCount); noch nicht fertig

    FillChar(buffer, sizeof(buffer), 0);
    for K := 0 to Count do
      MoveMemory(PByte(@buffer[0]) + 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 - 1; // Array beginnt bei 0 alternativ kann ich Count direkt -1 zuweisen
   end;
   Result := gP;
end;
gruss

Geändert von EWeiss (24. Nov 2017 um 03:26 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 07:05
Hall Emil,
nur mal was ich auf die schnell gesehen habe

Delphi-Quellcode:
  FillChar(buffer, sizeof(buffer), 0);
    for K := 0 to Count do // Warum nicht Count-1? Wenn z.B Count 1 ist kopierst Du 2 Einträge?
 // MoveMemory(PByte(@buffer[0]) + K * sizeof(Short), @A2[K], sizeof(Short));
  buffer[K] := A2[K]; // Warum das Pointer geschubse? Einfach zuweisen was anderes macht der C Code auch nicht

   // FillChar(A1, sizeof(A1), 0);
   // FillChar(A2, sizeof(A2), 0);
  A1 := nil; // Das Fillchar kannst Du dir sparen einfach den Speicher freigeben
 A2 := nil;
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 08:47
Delphi-Quellcode:
  A1 := nil; // Das Fillchar kannst Du dir sparen einfach den Speicher freigeben
  A2 := nil;
Das auf nil setzen kannst du dir auch sparen Das gibt keinen Speicher frei, sondern setzt nur 2 Variablen auf nil.
Der Speicher für das Array wird am Ende der Methode automatisch freigegeben.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 08:53
Das auf nil setzen kannst du dir auch sparen Das gibt keinen Speicher frei, sondern setzt nur 2 Variablen auf nil.
Der Speicher für das Array wird am Ende der Methode automatisch freigegeben.
Alte Angewohnheit, wenn ich Speicher hole gebe ich Ihn auch frei
liest sich für mich immer flüssiger.....
Fritz Westermann
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: 2 Arrays vergleichen\sortieren

  Alt 24. Nov 2017, 09:18
Zum Thema mich hat das nur mit dem MoveMemory geärgert das man hier hunderte von Konvertierungen machen muss
um am ende das gleiche Ergebnis zu bekommen wie unter den anderen Sprachen auch.
Wenn du dir das Leben einfacher machen würdest, dann hättest du auch nicht solche Probleme.
Nicht immer alles in einer Zeile Lösen wollen, das führt zu nix.
Das ist schwer lesbar und macht es kompliziert.
Komplizierte Dinge führen zu Fehlern, das regt dich auf.
Wenn du dich aufregst, wirst du unsachlich.
Wenn du unsachlich wirst, suchst du den Fehler bei dem Computer, dem Compiler, dem verwendeten Framework, der WinApi, der Sprache und/oder den Leuten, die dir nur helfen wollen und dabei auch mal ihre Worte nicht in Zuckerwatte packen.
Ist ja auch kein Streichelzoo hier!

Code:
PVOID Destination, Source;
SIZE_T MemorySize;

MemorySize = sizeof(short);
Destination = &buffer[0] + (K * MemorySize);
Source = &A2[K];
 
MoveMemory(Destination, Source, MemorySize);
Delphi-Quellcode:
var
 Destination, Source: Pointer;
 MemorySize: SIZE_T;
begin
...
  MemorySize := SizeOf(Short);
  Destination := Pointer(NativeUInt(@buffer[0]) + K * MemorySize);
  Source := @A2[K];
  MoveMemory(Destination, Source, MemorySize);

Geändert von TiGü (24. Nov 2017 um 09:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz