การใช้สตริงเป็นตัวแปรจำแนกในคำสั่ง Case ของ Delphi Chen Jiaxin╱jarsing@cina.chu.edu.tw● เมื่อ กล่าวถึง คำสั่ง Case ในบทนำ กรณีการใช้งานแรกที่นึกถึงคือผ่านตัวแปร กำหนด เพื่อให้โฟลว์ของโปรแกรมสามารถเลือกได้ เส้นทางที่เหมาะสมในการดำเนินการต่อไปตามเงื่อนไขต่างๆ หรือเมื่อมีชุดคำสั่ง if และ else if ในโปรแกรมของเรา เรามักจะนึกถึงการใช้คำสั่ง Case เพื่อทำให้โค้ดโปรแกรมง่ายขึ้น และปรับปรุงความสามารถในการอ่านและประสิทธิภาพในการดำเนินการ อย่างไรก็ตาม ในบางกรณี ไม่สามารถใช้คำสั่ง Case กับโปรแกรมของเราได้ เนื่องจากตัวแปรจำแนกที่อนุญาตนั้นจำกัดอยู่ที่รูปแบบใดๆ ของ 咚闶剑╡xPRession) และประเภทลำดับ ซึ่งเรียกว่า "Ordinal types" หมายถึง "ordered" " เช่น จำนวนเต็ม อักขระ การแจงนับ บูลีน และเซต และสามารถนำไปใช้กับสิ่งต่างๆ เช่น Ord(), Pred(), Succ(), Low() และ High() ประเภทของนิพจน์ (ดู [1]) . น่าเสียดายที่สตริง (สตริง) เห็นได้ชัดว่าไม่ใช่ประเภทลำดับ และในบางจุด (จะมีตัวอย่างด้านล่าง) เมื่อประเภทของตัวแปรเงื่อนไขเป็นสตริงและมีสาขาเงื่อนไขค่อนข้างน้อย แม้ว่ามันจะทำอะไรไม่ถูกก็ตาม อย่างไรก็ตาม ดูเหมือนจะไม่มีวิธีอื่นนอกจากการใช้คำสั่ง if และ else if มากมาย ตัวอย่างเช่น ไม่อนุญาตให้ใช้โค้ดต่อไปนี้ใน Delphi: #001 var #002 Str: String; // ประกาศตัวแปรจำแนกประเภท String #003 เริ่มต้น #004 case Str of // ข้อความแสดงข้อผิดพลาด: ต้องใช้ประเภทลำดับ #005 / / ... #006 end; #007 end;สิ่งนี้ไม่สามารถคอมไพล์ได้ ดังนั้นวิธีแก้ปัญหาแบบเดิมมักจะแปลงเป็นชุดคำสั่ง if และ else if จำนวนมาก ณ จุดนี้ ฉันหวังว่าเราจะใช้ Visual Basic จริงๆ เพราะคอมไพเลอร์อนุญาตโค้ดต่อไปนี้ (ดู [5]): #001 Dim Str As String ' ประกาศตัวแปรจำแนกประเภท String #002 Select Case Str ' เทียบเท่ากัน ไปยังคำสั่ง Case ของ Delphi #003 '... #004 End Select ' ตกลง ผ่านการคอมไพล์ ดังนั้นในบทความนี้ ผู้เขียนจึงพยายามใช้ปัญหานี้เป็นจุดเริ่มต้น นอกเหนือจากการแปลงเป็นชุดค่าผสมของคำสั่ง if และ else if “มองหาวิธีแก้ปัญหาอื่นๆ ที่เป็นไปได้นอกเหนือจากวิธีแก้ปัญหาแบบเดิมๆ” และหวังเป็นอย่างยิ่งว่าบทความนี้จะเป็นประโยชน์กับผู้ที่ประสบปัญหานี้และกระตือรือร้นที่จะหาวิธีแก้ไข (หลังจากอ่าน [12]-[14] ผู้เขียนยังพบอีกว่า เป็นกรณีนี้จริงๆ) ช่วยด้วย ฉันขอแสดงตัวอย่างก่อน ฉันวางแผนที่จะแนะนำ 7 วิธีแรกเป็นข้อความที่ตัดตอนมาหรือส่วนขยายจาก [9]-[13] ในขณะที่วิธีที่หกเป็นมัลติโหลดเดอร์แบบครอบคลุมที่ผู้เขียนนำมาใช้ รุ่น ตัวเลือกเหล่านี้ได้แก่: ตัวเลือกที่ 1: อาร์เรย์สตริงการค้นหา ตัวเลือกที่ 2: ใช้ดัชนีจริง ตัวเลือกที่ 3: ใช้ฟังก์ชันแฮช ตัวเลือกที่ 4: คำสั่ง case ที่ซ้อนกัน ตัวเลือกที่ 5: ใช้ TStringListv ตัวเลือกที่ 6: ใช้ฟังก์ชันมัลติโหลด โซลูชันที่ 7: ใช้ คำแนะนำสำเร็จรูป บทความนี้จะเริ่มต้นด้วยการทบทวนหัวข้อต่างๆ เช่น ข้อความสั่งแบบมีเงื่อนไข (เนื้อหาหลักอ้างอิงถึง [1] และ [4]) และสตริงการจดจำ (เนื้อหาหลักอ้างอิงถึง [2]) ในส่วนนี้ ให้อ่านหัวข้อ "ปัญหาด้านประสิทธิภาพ" โดยตรงในตอนท้ายของบทความ