ما هو أفضل لاستخدام: قاموس <> ForEach (الزوج =>) أو قاموس <> Keys.ForEach (مفتاح =>).؟

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

سؤال

وإذا كان لدي فقط الوصول مفاتيح من Dictionary<TKey, TValue> ما هو أفضل لاستخدام:

Dictionary<TKey, TValue>.ForEach(pair => action(pair.Key))

أو

Dictionary<TKey, TValue>.Keys.ForEach(key => action(key))

والأسلوب الذي هو أكثر "أفضل الممارسات"؟ السرعة في كلتا الحالتين أعتقد يبدو لتكون مشابهة جدا.

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

المحلول

وأعتقد أن هذا يعتمد كليا على حالة استخدامك. إذا كنت بحاجة فقط لاستخدام مفتاح في المسند، وأود أن استخدام النسخة الثانية. وإلا فإنك تقوم بإضافة المزيد من المعلومات لامدا مما هو الضرورة القصوى.

ولكن أنا لا أعتقد أن هناك قاعدة جامدة وسريعة هنا. ربما فقط كل ما يتدفق من لوحة المفاتيح أكثر طبيعية.

وبالمثل، إذا كنت بحاجة إلى استخدام كل من مفتاح وقيمة، والذهاب مع الأول.

نصائح أخرى

وأنا أفضل أن استخدام

foreach (TKey key in dictionary.Keys)
{
    DoStuff(key);
}

وإذا كنت بحاجة إلى مفاتيح فقط لأنه يعبر عن نية أفضل بكثير من بالتكرار عبر أزواج قيمة المفتاح وليس بطيئا - الوصول إلى المفتاح هو O(1)

إذا سرعة هو ما كنت بعد ثم أود أن أقترح عليك أن تفعل هذا:

foreach (TKey key in yourDictionary.Keys)
    action(key)

وهذا لا يتطلب إنشاء مندوب لأيا كانت الطريقة التي تستخدم كما action.

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

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