এসোসিয়েটিভ অ্যারের ব্যবহার

C:
এসোসিয়েটিভ অ্যারের ব্যবহার

কিভাবে:

C ভাষায় উচ্চ-স্তরের ভাষাগুলির মত সম্পর্কিত অ্যারেগুলির জন্য অন্তর্নির্মিত সমর্থন নেই, তবে আপনি কাঠামো এবং হ্যাশিং ব্যবহার করে তাদের অনুকরণ করতে পারেন। নীচে একটি সরলীকৃত উদাহরণ দেওয়া হল, যেখানে একটি struct এবং একটি সাধারণ হ্যাশিং ফাংশনের সমন্বয়ে স্ট্রিং কী দ্বারা ইন্টিজারগুলি সংরক্ষণ এবং অ্যাক্সেসের জন্য একটি সম্পর্কিত অ্যারে বাস্তবায়ন করার পদ্ধতি দেখানো হয়েছে।

প্রথমে, একটি একক কী-মান জোড়া এবং অন্যটি সম্পর্কিত অ্যারেটি নিজেই প্রতিনিধিত্ব করার জন্য একটি কাঠামো সংজ্ঞায়িত করুন:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TABLE_SIZE 128

typedef struct {
    char* key;
    int value;
} KeyValuePair;

typedef struct {
    KeyValuePair* items[TABLE_SIZE];
} AssocArray;

unsigned int hash(char* key) {
    unsigned long int value = 0;
    unsigned int i = 0;
    unsigned int key_len = strlen(key);

    for (; i < key_len; ++i) {
        value = value * 37 + key[i];
    }

    value = value % TABLE_SIZE;

    return value;
}

void initArray(AssocArray* array) {
    for (int i = 0; i < TABLE_SIZE; ++i) {
        array->items[i] = NULL;
    }
}

void insert(AssocArray* array, char* key, int value) {
    unsigned int slot = hash(key);

    KeyValuePair* item = (KeyValuePair*)malloc(sizeof(KeyValuePair));
    item->key = strdup(key);
    item->value = value;

    array->items[slot] = item;
}

int find(AssocArray* array, char* key) {
    unsigned int slot = hash(key);

    if (array->items[slot]) {
        return array->items[slot]->value;
    }
    return -1;
}

int main() {
    AssocArray a;
    initArray(&a);

    insert(&a, "key1", 1);
    insert(&a, "key2", 2);

    printf("%d\n", find(&a, "key1")); // আউটপুট: 1
    printf("%d\n", find(&a, "key2")); // আউটপুট: 2

    return 0;
}

এই উদাহরণটি একটি সম্পর্কিত অ্যারে আরম্ভ করা, কী-মান জোড়া অন্তর্ভুক্ত করা, এবং কীগুলি দ্বারা মানগুলি খুঁজে পাওয়ার মৌলিক কার্যাবলী প্রদর্শন করে। মনে রাখবেন যে এই কোডে সংঘর্ষ প্রক্রিয়াকরণের অভাব রয়েছে এবং এটি শিক্ষামূলক উদ্দেশ্যের জন্য।

গভীর ডাইভ

সম্পর্কিত অ্যারের ধারণা C ভাষার পূর্বেই ছিল, কিন্তু ভাষার নিম্ন-স্তরের প্রকৃতি সরাসরি অন্তর্নির্মিত প্রকার হিসেবে তাদের সমর্থন করে না। এটি ডেটা কাঠামো এবং অ্যালগরিদমগুলি, দক্ষ কী-মান ম্যাপিংয়ের জন্য হ্যাশিং মেকানিজম সহ, আরও গভীর বোঝার উৎসাহিত করে। অনেক C লাইব্রেরি এবং ফ্রেমওয়ার্ক সম্পর্কিত অ্যারে বাস্তবায়নের জন্য আরও জটিল পদ্ধতি অফার করে, যেমন GLib-র GHashTable, যা সংঘর্ষ প্রক্রিয়াকরণ, গতিশীল পুনঃআয়তন, এবং যেকোনো কী এবং মান প্রকারের জন্য সমর্থন সহ একটি দৃঢ় বাস্তবায়ন সরবরাহ করে।

C ভাষায় সম্পর্কিত অ্যারেগুলোর ম্যানুয়াল নির্মাণ অন্তর্নির্মিত সমর্থনের সাথে ভাষাগুলির তুলনায় বিরক্তিকর মনে হলেও, এটি ডেটা কাঠামোর অভ্যন্তরীণ কাজের মধ্যে গভীর দৃষ্টিভঙ্গি প্রদান করে, একজন প্রোগ্রামারের সমস্যা সমাধান এবং অপ্টিমাইজেশনের দক্ষতা বাড়ায়। যাইহোক, উৎপাদন কোড বা আরও জটিল অ্যাপ্লিকেশনের জন্য, GLib এর মতো বিদ্যমান লাইব্রেরি ব্যবহার করা প্রায়শই আরও বাস্তবিক এবং সময়-কার্যকর পদ্ধতি।