ความท้าทายในการจัดเรียงอาร์เรย์ใน Delphi

การจัดเรียงเป็นการดำเนินการพื้นฐานในโปรแกรมมิ่งที่จัดระเบียบข้อมูลให้เป็นลำดับที่มีความหมาย เมื่อทำงานกับอาร์เรย์ใน Delphi—โดยเฉพาะอย่างยิ่งอาร์เรย์ของเรคคอร์ด—นี่อาจเป็นความท้าทายเฉพาะตัว ลองนึกภาพว่าคุณมีอาร์เรย์ของเรคคอร์ดและต้องการจัดเรียงตามฟิลด์เฉพาะ เช่น ค่าทั้งจำนวนเต็มที่แทนลำดับการจัดเรียง วิธีที่ดีที่สุดในการทำเช่นนี้อย่างมีประสิทธิภาพคืออะไร?

ในโพสต์นี้ เราจะสำรวจวิธีที่ดีที่สุดในการจัดเรียงอาร์เรย์ใน Delphi โดยแบ่งออกเป็นวิธีดั้งเดิมและเทคนิคใหม่ที่นำเสนอในเวอร์ชันล่าสุด มาดำดิ่งกันเถอะ!

วิธีดั้งเดิม: การใช้ TList

วิธีหนึ่งในการจัดเรียงอาร์เรย์ของเรคคอร์ดคือการใช้รายการแบบไดนามิก นี่คือวิธีการทำตามขั้นตอน:

ขั้นตอนที่ 1: สร้างประเภทเรคคอร์ดของคุณ

ก่อนอื่นคุณต้องกำหนดโครงสร้างของเรคคอร์ดของคุณ ในกรณีนี้ เราจะสร้างประเภทเรคคอร์ดที่เรียกว่า TExample ซึ่งประกอบด้วยจำนวนเต็มสำหรับลำดับการจัดเรียงและฟิลด์อื่น ๆ

type
  TExample = record
    SortOrder: integer;
    SomethingElse: string;
  end;

ขั้นตอนที่ 2: ประกาศอาร์เรย์ของคุณ

ต่อไป ให้ประกาศอาร์เรย์ที่จะเก็บตัวอย่างเรคคอร์ดของคุณ

var
  SomeVar: array of TExample;

ขั้นตอนที่ 3: จัดเรียงด้วย TList

เพื่อจัดเรียงเรคคอร์ดของคุณ คุณสามารถสร้างรายการและเพิ่มพอยเตอร์ไปยังองค์ประกอบของอาร์เรย์ของคุณ คลาส TList มีวิธีการจัดเรียงในตัว แต่คุณจำเป็นต้องจัดหาฟังก์ชันการเปรียบเทียบเพื่อกำหนดว่าสิ่งของจะถูกเปรียบเทียบอย่างไร

ใหม่และดีขึ้น: ไลบรารีคอลเลคชันใน D2009

หากคุณใช้ Delphi 2009 หรือใหม่กว่า จะมีวิธีที่เรียบง่ายยิ่งขึ้นจากไลบรารีคอลเลคชันใหม่ วิธีนี้ทำให้คุณสามารถจัดเรียงอาร์เรย์ได้โดยตรงและเสนอความยืดหยุ่นที่มากขึ้นด้วยการจัดเรียงที่กำหนดเองผ่านการใช้งาน IComparer

ขั้นตอนที่ 1: ใช้ TArray.Sort

วิธีการจัดเรียงใหม่ใช้ฟังก์ชัน TArray.Sort ร่วมกับการเปรียบเทียบที่กำหนดเอง นี่คือวิธีการใช้งาน:

TArray.Sort<TExample>(SomeVar, TDelegatedComparer<TExample>.Construct(
  function(const Left, Right: TExample): Integer
  begin
    Result := TComparer<Integer>.Default.Compare(Left.SortOrder, Right.SortOrder);
  end));

วิธีการทำงาน

  • ฟังก์ชันการเปรียบเทียบ: คุณจัดหาฟังก์ชันการเปรียบเทียบซึ่งคุณกำหนดว่าสิ่งของสองชิ้นจะถูกเปรียบเทียบอย่างไร ในตัวอย่างของเรา เรากำลังเปรียบเทียบคุณสมบัติ SortOrder ของเรคคอร์ด TExample สองชิ้น
  • จัดเรียงในที่: โดยใช้ TArray.Sort อาร์เรย์ดั้งเดิมของคุณ SomeVar จะถูกจัดเรียงในที่ ซึ่งหมายความว่าจะไม่ต้องมีการจัดสรรหน่วยความจำเพิ่มเติมสำหรับอาร์เรย์ใหม่ ซึ่งจะช่วยเพิ่มประสิทธิภาพและประสิทธิผล

สรุป

การจัดเรียงอาร์เรย์ของเรคคอร์ดใน Delphi สามารถทำได้อย่างมีประสิทธิภาพโดยใช้ทั้งวิธีดั้งเดิมด้วย TList หรือแนวทางสมัยใหม่ที่นำเสนอใน Delphi 2009 โดยการใช้เครื่องมือในตัวอย่างเช่น TArray.Sort และฟังก์ชันการเปรียบเทียบที่กำหนดเอง คุณสามารถจัดระเบียบข้อมูลของคุณอย่างมีประสิทธิภาพในขณะที่รักษาความสะอาดและคงความรักษาได้ของโค้ดของคุณ

ไม่ว่าคุณจะเลือกใช้วิธีดั้งเดิมหรือนวัตกรรมสมัยใหม่ การเข้าใจเทคนิคเหล่านี้จะช่วยให้คุณสามารถจัดการและจัดเรียงข้อมูลตามที่ต้องการในแอปพลิเคชัน Delphi ของคุณ