ماذا يمكن أن تستخدم مزدوج قاموس الموارد جانب؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

وأنا باستخدام ResourceDictionary، ولكن أود أن تكون قادرة للبحث عن قيمة أو مفتاح مع عنصر آخر. كل واحدة دائما فريدة من نوعها، بحيث ليست مشكلة. هناك النوع الذي لديه هذا مزدوجة ميزة البحث من جانب و؟

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

المحلول

وليس في بني، ولكن هذا أمر سهل جدا في الكتابة. أنا ربما تنفيذ IDictionary لهذا على الرغم من ... أنت ثم تفريغ ResourceDictionary إلى نوع مخصص.

public class DoubleLookup<TKey, TValue>
{
  private IDictionary<TKey, TValue> keys;
  private IDictionary<TValue, TKey> values;

  //stuff...

  public void Add(TKey key, TValue value)
  {
    this.keys.Add(key, value);
    this.values.Add(value, key);
  }

  public TKey GetKeyFromValue(TValue value)
  {
    return this.values[value];
  }

  public TValue GetValueFromKey(TKey key)
  {
    return this.keys[key];
  }


}

نصائح أخرى

كن حذرا جدا عندما عكس العلاقة مفتاح / قيمة في القاموس.

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

في مكتبة رمز الخاصة نظري الشخصية (مكتوب بلغة جافا، التي هي قريبة بما فيه الكفاية)، ولدي الطبقة MultiMap فقط لهذا النوع من الشيء. على الرغم من أن مفاتيح فريدة من نوعها، كل مفتاح يمكن أن تترافق مع قيم متعددة. انها متطابقة تماما مع خريطة>.

وعندما تحتاج لأداء القيمة إلى مفتاح عمليات البحث في مجموعة، أفعل شيئا من هذا القبيل:

Map<K, V> lookupTable = ...;
MultiMap<V, K> reverseLookupTable = MapUtil.invert(lookupTable);

V value = ...;
if (reverseLookupTable.containsKey(value)) {
   Set<K> keys = reverseLookupTable.get(value);
}

إذا كنت تستخدم شيئا آخر غير MultiMap (مثل HashMap أو القاموس) كما في الجدول عكس البحث الخاص بك، كنت عرضة لخطر فقدان بعض تعيينات V-> K، إلا إذا كنت يمكن أن نضمن أن جميع المفاتيح وجميع القيم في مجموعتك هي فريدة من نوعها.


وتحرير:

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

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