ความท้าทายในการจัดเรียงอาร์เรย์ใน 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 ของคุณ