2つの値を1つのリストに保存する必要があるため、すべてのポジションと1つのリスト内の自分のコントロールを持っています。 辞書を使用していましたが、一方向のマッピングしかないことがわかりました。 2次元配列以外の推奨事項はありますか?双方向マッピングリスト
5
A
答えて
6
あなたは(あなたがとにかく2D配列で取得したい)逆マッピングのための線形検索パフォーマンスを気にしない場合は、双方向のマッピングなど簡単に十分な辞書を使用することができます。
var dictionary = new Dictionary<string, int>();
// Fill it up...
int forwardMapResult = dictionary["SomeKey"];
string reverseMapResult = dictionary.Where(kvp => kvp.Value == 5).First().Key;
ルックアップの速度が問題となる場合は、前方参照と逆方向の2つの辞書を管理する必要があります。または、SQLiteなどのインメモリ、インデックス可能なデータベースを使用します。
7
これが役立つことがあります。左右が同じ型が...つまりは、それが動作しない場合、これはあなたがしようと右の場合は問題があります
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>();
+0
L&Rは同じタイプではなく、常に1対1の関係があると仮定すると非常に良いです。 –
関連する問題
- 1. ManyToMany双方向
- 2. 双方向バインド
- 3. 双方向カスケード
- 4. 双方向リスト
- 5. 双方向アソシエーション
- 6. 双方向バブルソートプルーフ
- 7. C - 双方向リンクリスト
- 8. CanJS - 双方向バインディング
- 9. 双方向同等
- 10. Hibernate - 双方向@OneToOne
- 11. 双方向OOPデザインパターン
- 12. 双方向Mercurialマージ
- 13. 双方向はWPF
- 14. 双方向データバインディング - ngModel
- 15. ssh forward - 双方向
- 16. 双方向接続
- 17. C++「双方向」オブザーバーパターン
- 18. DataGridCheckboxColumn双方向バインディング
- 19. AngularJs双方向ソートフィルター?
- 20. 双方向接続
- 21. ASP.NETで双方向(双方向)データバインディングとは何ですか?
- 22. 多対多の双方向の双方向@JsonManagedReferenceおよび@JsonBackReference
- 23. @OneToOne単方向および双方向
- 24. Doctrine - OneToOne単方向対OneToOne双方向
- 25. NHibernateの双方向のアソシエーション
- 26. JSONとの双方向バインディング?
- 27. カウント総数フォームメジャーパワー双方向
- 28. WPF Programaticllyバインディング双方向
- 29. 角2:ContenteditableModel:双方向データバインディング
- 30. JPAの双方向関係
あなたは1つのコレクションに2つの異なるタイプを保存したいですか? –
はい、まさに私がやりたいことです! –