Tôi cần lưu 2 giá trị trong một danh sách để tôi có tất cả các vị trí VÀ điều khiển của bảng của tôi trong một danh sách. Tôi đã sử dụng một từ điển nhưng tôi phát hiện ra rằng chỉ có một cách ánh xạ. Có ai có bất kỳ đề xuất nào ngoại trừ Mảng 2 chiều không?Danh sách Ánh xạ hai chiều
Trả lời
Bạn có thể sử dụng một cuốn từ điển dễ dàng đủ như một ánh xạ hai chiều nếu bạn không quan tâm đến hiệu suất tuyến tính tìm kiếm ánh xạ ngược (mà bạn sẽ nhận được với mảng 2D anyway):
var dictionary = new Dictionary<string, int>();
// Fill it up...
int forwardMapResult = dictionary["SomeKey"];
string reverseMapResult = dictionary.Where(kvp => kvp.Value == 5).First().Key;
Nếu tốc độ tra cứu là một vấn đề hơn bạn sẽ phải duy trì hai từ điển - một cho tra cứu chuyển tiếp và một cho ngược lại. Hoặc sử dụng cơ sở dữ liệu có thể lập chỉ mục trong bộ nhớ, chẳng hạn như SQLite.
này có thể giúp:
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);
}
này có một vấn đề nếu phía bên trái và bên phải là cùng loại ... tức là, nó không hoạt động đúng nếu bạn cố gắng
var myBiDireDict = new BiDirectionalDictionary<DateTime, DateTime>();
Giả sử L & R rất tốt không cùng loại và luôn có mối quan hệ 1 đến 1. –
- 1. Có gì sai với ánh xạ hai chiều?
- 2. cách ánh xạ danh sách theo thứ tự trong nhibernate?
- 3. @OneToMany giới hạn kích thước danh sách ánh xạ
- 4. Danh sách hai chiều trong Java
- 5. Danh sách ánh xạ vào danh sách hiện có trong Automapper bằng cách sử dụng phím
- 6. Lưu loát NHibernate một đến nhiều ánh xạ một chiều
- 7. Danh sách hai chiều gán sai giá trị trong python
- 8. Chuyển đổi hoặc ánh xạ danh sách lớp thành danh sách lớp khác bằng cách sử dụng Lambda hoặc LINQ?
- 9. Lấy chiều dài cột từ ánh xạ Hibernate?
- 10. Lưu loát NHibernate: Cách tạo ánh xạ một chiều nhiều chiều?
- 11. Hai phương pháp để ánh xạ phím trong Emacs
- 12. Ánh xạ liên kết với siêu lớp được ánh xạ
- 13. Perl: ánh xạ thành phần tử đầu tiên của danh sách
- 14. Ánh xạ một JSONObject vào một Danh sách với Flexjson trong Java/Android
- 15. ánh xạ danh sách chuỗi thành cấu trúc phân cấp của các đối tượng
- 16. danh sách đầy đủ của mime-type <-> ánh xạ tệp mở rộng
- 17. Cách ánh xạ (bí danh?) Lệnh trong vim
- 18. nhập vào ánh xạ int
- 19. Python tìm chiều dài danh sách trong danh sách con
- 20. python .count cho mảng đa chiều (danh sách danh sách)
- 21. Cách xác định ánh xạ trong elasticsearch không chấp nhận các trường khác mà các ánh xạ được ánh xạ?
- 22. App Engine ánh xạ URL
- 23. @OneToOne một chiều và hai chiều
- 24. Hibernate và H2 "Vi phạm ràng buộc toàn vẹn tham chiếu" đối với ánh xạ hai chiều OneToMany
- 25. Fluent Nibernate đặt mệnh đề where trong ánh xạ
- 26. mapply và hai danh sách
- 27. Kết hợp hai danh sách
- 28. NHibernate hai chiều nhiều-nhiều hiệp hội
- 29. Scala - Hai danh sách vào danh sách Tuple
- 30. tách một danh sách lồng nhau thành hai danh sách
Bạn muốn lưu trữ 2 loại khác nhau trong một Bộ sưu tập? –
Vâng đó chính là điều tôi muốn làm! –