Tek bir listede 2 değer kaydetmem gerekiyor, böylece tüm konumlar ve kartımın denetimlerim tek bir listede var. Sözlük kullandım, ancak tek bir yol haritasının olduğunu öğrendim. 2-boyutlu bir dizi dışında herhangi bir tavsiyede bulunan var mı?İki Yönlü Eşleme listesi
cevap
Eğer (yine 2B dizi alacağınız) ters haritalama doğrusal arama performansı umurumda değil eğer iki yönlü haritalama gibi kolayca yeterli bir sözlük kullanabilirsiniz:
var dictionary = new Dictionary<string, int>();
// Fill it up...
int forwardMapResult = dictionary["SomeKey"];
string reverseMapResult = dictionary.Where(kvp => kvp.Value == 5).First().Key;
Arama hızı, bir tanesi ileriye doğru arama için, diğeri de geriye doğru olmak üzere iki sözlükte saklamanız gereken bir sorunsa. Veya SQLite gibi bir bellek içi, endekslenebilir veritabanı kullanın.
Bu yardımcı olabilir: sol taraf ve sağ taraf aynı tip ... yani çalışmıyor yoksa bu denemek doğru olmadığını bir sorunu var
public class BiDirectionalDictionary<L, R>
{
private readonly Dictionary<L, R> leftToRight = new Dictionary<L, R>();
private readonly Dictionary<R, L> rightToLeft = new Dictionary<R, L>();
public void Add(L leftSide, R rightSide)
{
if (leftToRight.ContainsKey(leftSide) ||
rightToLeft.ContainsKey(rightSide))
throw new DuplicateNameException();
leftToRight.Add(leftSide, rightSide);
rightToLeft.Add(rightSide, leftSide);
}
public L this[R rightSideKey]
{ get { return rightToLeft[rightSideKey]; } }
public R this[L leftSideKey]
{ get { return leftToRight[leftSideKey]; } }
public bool ContainsKey(L leftSideKey)
{ return leftToRight.ContainsKey(leftSideKey); }
public bool ContainsKey(R rightSideKey)
{ return rightToLeft.ContainsKey(rightSideKey); }
}
[Serializable]
public class DuplicateNameException : SystemException
{
protected DuplicateNameException(
SerializationInfo info, StreamingContext context);
public DuplicateNameException();
public DuplicateNameException(string s);
public DuplicateNameException(string message,
Exception innerException);
}
var myBiDireDict = new BiDirectionalDictionary<DateTime, DateTime>();
L & R'nin aynı türde olmadığını ve her zaman 1'den 1'e kadar bir ilişki olduğunu varsayarsak çok iyi olur. –
Tek bir Koleksiyonda 2 farklı Tip saklamak ister misiniz? –
Evet, tam olarak ne yapmak istiyorum! –