ما هو أفضل لاستخدام: قاموس <> ForEach (الزوج =>) أو قاموس <> Keys.ForEach (مفتاح =>).؟
-
06-07-2019 - |
سؤال
وإذا كان لدي فقط الوصول مفاتيح من 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
. م>