जैसा कि हम जानते हैं, परिभाषा के अनुसार सरणियाँ सजातीय (homogeneous) होती हैं। इसलिए हमें एक सरणी में समान प्रकार का डेटा रखना होता है। लेकिन यदि हम विभिन्न प्रकार का डेटा संग्रहीत करना चाहते हैं, तो क्या तरकीब होगी? C जैसी पुरानी भाषाओं में, हम विभिन्न प्रकारों को कृत्रिम रूप से एक प्रकार में सम्मिलित (coalesce) करने के लिए यूनियनों (unions) का उपयोग कर सकते हैं। फिर हम इस नए प्रकार पर एक सरणी परिभाषित कर सकते हैं। यहाँ एक सरणी तत्व में वास्तव में किस प्रकार का ऑब्जेक्ट है, यह एक टैग (tag) द्वारा निर्धारित होता है। आइए ऐसी एक संरचना देखें:
struct Vehicle {
int id;
union {
Bus b;
Bike c;
Car d;
}
};
तब प्रोग्रामर को एक परंपरा स्थापित करनी होगी कि id टैग का उपयोग कैसे किया जाएगा। मान लीजिए, उदाहरण के लिए, जब id 0 हो, तो इसका मतलब है कि दर्शाया गया Vehicle वास्तव में एक Bus है, आदि। यूनियन Bus, Bike और Car में से सबसे बड़े प्रकार के लिए मेमोरी आवंटित करता है। यदि वस्तुओं के आकार में बड़ी असमानता है तो यह मेमोरी के लिए बर्बादी है।
ऑब्जेक्ट-ओरिएंटेड भाषाओं में दृष्टिकोण
ऑब्जेक्ट-ओरिएंटेड भाषाओं में, हम विरासत (inheritance) की अवधारणा का उपयोग कर सकते हैं। मान लीजिए हमारे पास Vehicle नामक एक क्लास है, और अन्य सभी प्रकार जैसे Bus, Bike और Car इसके उप-वर्ग (sub-class) हैं। इसलिए यदि हम Vehicle के लिए एक सरणी परिभाषित करते हैं, तो वह उसके सभी उप-वर्गों को भी रख सकती है। यह हमें एक ही सरणी में विभिन्न प्रकार के डेटा को संग्रहीत करने में मदद करेगा।