ปัญหาของอาร์เรย์ทั่วไป
ตามนิยาม อาร์เรย์เป็นโครงสร้างข้อมูลแบบเหมogeneous (Homogeneous) คือต้องเก็บข้อมูลชนิดเดียวกันเท่านั้น แต่ถ้าต้องการเก็บข้อมูลหลายชนิดในอาร์เรย์เดียว จะต้องใช้เทคนิคพิเศษ
วิธีที่ 1: ใช้ Union ในภาษา C
ในภาษา C สามารถใช้ Union เพื่อรวมชนิดข้อมูลต่างๆ ให้กลายเป็นชนิดเดียวกันได้ แล้วจึงสร้างอาร์เรย์ของชนิดใหม่นี้ ชนิดของอ็อบเจกต์ที่แต่ละองค์ประกอบเก็บจริงๆ จะถูกกำหนดโดย tag
struct Vehicle {
int id;
union {
Bus b;
Bike c;
Car d;
};
};
โปรแกรมเมอร์ต้องกำหนดข้อตกลงเองว่า id tag จะใช้อย่างไร เช่น id = 0 หมายถึง Bus เป็นต้น Union จะจัดสรรหน่วยความจำตามขนาดของชนิดที่ใหญ่ที่สุดระหว่าง Bus, Bike, Car ซึ่งอาจ造成การสูญเสียหน่วยความจำหากขนาดต่างกันมาก
วิธีที่ 2: ใช้การสืบทอด (Inheritance) ในภาษาเชิงวัตถุ
ในภาษาเชิงวัตถุ (Object-Oriented) สามารถใช้แนวคิดการสืบทอด (Inheritance) สมมติมีคลาส Vehicle และ Bus, Bike, Car เป็นคลาสลูก (Subclass) หากสร้างอาร์เรย์สำหรับ Vehicle จะสามารถเก็บอ็อบเจกต์ของคลาสลูกทั้งหมดได้ วิธีนี้ช่วยให้เก็บข้อมูลหลายชนิดในอาร์เรย์เดียวได้อย่างมีประสิทธิภาพ