أين يمكنني تخزين جدول التجزئة أو أسماء مفاتيح القاموس؟

StackOverflow https://stackoverflow.com/questions/656758

سؤال

عندما أعمل مع جداول التجزئة/القواميس، أجد صعوبة أحيانًا في كيفية تحديد المفاتيح.

على سبيل المثال:إذا قمت بإنشاء قاموس بسيط (باستخدام بايثون لهذا المثال)،

foo = {'bar': 'baz', 'foobar': 'foobaz' }

يمكنني الوصول إلى القيم (في الوحدات الأخرى) باستخدام القيم الأساسية:(foo['bar']) واحصل على baz خلف.

على لسان د.الشر، "معياري جدًا، حقًا."

لسوء الحظ، فإن استخدام السلاسل الثابتة للمفاتيح يربط بشكل وثيق أي وحدات تستخدم هذا القاموس بتنفيذه.بالطبع، يمكن أن ينطبق هذا أيضًا عند استخدام أنواع المفاتيح الأخرى (على سبيل المثال.التعدادات، الكائنات، وما إلى ذلك)؛على أي حال تقوم بتقطيعه، فإن جميع الوحدات التي تصل إلى القاموس تحتاج إلى معرفة قيم المفاتيح.

لحل هذه المشكلة، عادةً ما أستخدم قيم سلسلة ثابتة ثابتة (أو التعدادات إذا كانت متوفرة باللغة) للمفاتيح، وإما تخزينها بشكل عام في الفئة/الوحدة المحلية، أو في وحدة نمطية/فئة منفصلة.لذلك يتم الاحتفاظ بأي تغييرات يتم إجراؤها على مفاتيح القاموس نفسها في مكان واحد.

يبدو هذا عادةً كما يلي:

BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'

هل هناك طرق أفضل لتحديد المفاتيح بحيث لا يؤدي استخدام القاموس بالضرورة إلى ربط الوحدة النمطية/الفئة بتنفيذها؟

ملحوظة:لقد رأيت بعض الردود في SO التي تتناول هذا (على سبيل المثال. خاصية-إلى-مرجع-قيمة-مفتاح-زوج-في-قاموس)، ولكن يبدو أن المواضيع لا تتناول هذه المشكلة على وجه التحديد.كانت الإجابات مفيدة، لكني أرغب في الحصول على نطاق أوسع من الخبرة.

هل كانت مفيدة؟

المحلول

لماذا لا يتم إنشاء فئة لهذا، والتي تحتوي على خصائص فقط؟ويتم ذلك بشكل جيد مع بايثون (حسب ما أعرفه)، ويعمل بشكل جيد مع اللغات الأخرى أيضًا.تعد إعادة هيكلة الأسماء أمرًا تافهًا باستخدام أدوات اليوم أيضًا.

نصائح أخرى

في الحالات التي أقوم فيها بتمرير الكائن ولدي مفاتيح معروفة، أفضل دائمًا إضافة سمة إلى الكائن.IMO، حالة استخدام القواميس هي عندما لا تعرف ما هي المفاتيح.

بايثون تافهة:

foo.bar=baz

جافا هي نفسها إلى حد كبير:

class Foo { public String bar="baz"; }

سيكون أداء Python متطابقًا إلى حد كبير، نظرًا لأن البحث عن الخصائص هو مجرد بحث في القاموس وسيكون أداء Java أفضل.

أقوم أحيانًا بإنشاء فصل دراسي منفصل للاحتفاظ بمفاتيح القاموس.وهذا يمنحهم مساحة الاسم الخاصة بهم، بالإضافة إلى الفوائد المعتادة لوجود المفاتيح في سلاسل ثابتة، أي أنك لا تتعرض لخطر الأخطاء المطبعية، وتحصل على إكمال التعليمات البرمجية، ومن السهل تغيير قيمة السلسلة.إذا كنت لا ترغب في إنشاء فئة منفصلة، ​​فستحصل على جميع الفوائد باستثناء مساحة الاسم فقط من السلاسل الثابتة.

ومع ذلك، أعتقد أنك تقترب من الترميز الناعم إِقلِيم.إذا تغيرت المفاتيح الموجودة في القاموس، فلا بأس في تغيير التعليمات البرمجية التي تستخدم القاموس.

أنا شخصياً أستخدم طريقتك.إنه أمر معقول جدًا وبسيط ويحل المشكلة الفعلية.

عادة ما أفعل نفس الشيء؛إذا كان المفتاح هو نفسه دائمًا، فقم بإنشاء "ثابت ثابت" بأي لغة للاحتفاظ بالمفتاح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top