Tôi đang sử dụng ResourceDictionary, nhưng tôi muốn có thể tra cứu giá trị hoặc khóa bằng mục khác. Mỗi cái luôn là duy nhất, do đó, đó không phải là vấn đề. Có một loại có tính năng tra cứu hai mặt này không?Điều gì có thể được sử dụng làm từ điển tài nguyên hai mặt?
Trả lời
Không được tích hợp sẵn, nhưng điều này khá dễ viết. Tôi có lẽ sẽ thực hiện IDictionary cho điều này mặc dù ... Sau đó bạn sẽ đổ ResourceDictionary vào loại tùy chỉnh của bạn.
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];
}
}
Hãy cẩn thận khi đảo ngược mối quan hệ khóa/giá trị trong từ điển.
Hợp đồng của từ điển đảm bảo rằng, đối với mọi giá trị trong bộ sưu tập, có chính xác một khóa ánh xạ tới giá trị đó. Các phím là duy nhất. Nhưng ngược lại không đúng; đối với mọi giá trị riêng biệt, có thể có nhiều ánh xạ khóa khác nhau cho giá trị đó.
Trong thư viện mã cá nhân của riêng tôi (viết bằng Java, đủ gần), tôi có lớp MultiMap cho loại điều này. Mặc dù các phím là duy nhất, mỗi khóa có thể được liên kết với nhiều giá trị. Nó giống hệt với Bản đồ>.
Khi tôi cần phải thực hiện giá trị-to-key tra cứu trong bộ sưu tập, tôi làm điều gì đó như thế này:
Map<K, V> lookupTable = ...;
MultiMap<V, K> reverseLookupTable = MapUtil.invert(lookupTable);
V value = ...;
if (reverseLookupTable.containsKey(value)) {
Set<K> keys = reverseLookupTable.get(value);
}
Nếu bạn sử dụng một cái gì đó khác hơn là một Multimap (như một HashMap hoặc từ điển) là ngược lại của bạn - bảng tra cứu, bạn có nguy cơ mất một số ánh xạ V-> K, trừ khi bạn có thể đảm bảo rằng tất cả các khóa và tất cả các giá trị trong bộ sưu tập của bạn là duy nhất.
EDIT:
Rất tiếc. Tôi chỉ nhận thấy rằng bạn đã nói rằng tất cả các khóa và giá trị trong bộ sưu tập của bạn là duy nhất. Nhưng tôi sẽ để lại câu trả lời của tôi ở đây dù sao đi nữa, như một lời cảnh báo cho những người khác đang đọc cái này, những người có thể không có khả năng đảm bảo như vậy.
- 1. Tải/Sử dụng Từ điển Tài nguyên từ một điều khiển WPF được lưu trữ trên máy chủ WinForms
- 2. Điều khiển WPF là StaticResource trong Từ điển tài nguyên, được sử dụng trong nhiều Windows WPF?
- 3. Tạo từ điển tài nguyên tĩnh
- 4. Sử dụng từ điển tài nguyên làm chủ đề trong Silverlight
- 5. Từ điển có hai phím?
- 6. Sự cố khi tham chiếu một Từ điển tài nguyên có chứa từ điển được hợp nhất
- 7. Làm cách nào để có được BitmapImage từ Tài nguyên?
- 8. Cách gán từ điển tài nguyên cho các điều khiển tùy chỉnh trong một dll
- 9. Điều gì có thể khiến “Tài nguyên tạm thời không khả dụng” trên lệnh send send()
- 10. Từ điển hai chiều?
- 11. Điều gì, nếu có, là hình phạt tài nguyên để sử dụng System.Diagnostics.Stopwatch?
- 12. làm thế nào để có được con đường tài nguyên sử dụng subpath Sử dụng NSBundle
- 13. WPF MahApps.Metro - Nơi đặt Tài nguyên Từ điển?
- 14. truy cập từ điển tài nguyên trong mã wpf
- 15. Spring Bean nguyên mẫu được sử dụng để làm gì?
- 16. sử dụng hai mặt hàng như chìa khóa để tạo python điển
- 17. Riêng VisualStateManager.VisualStateGroups vào một từ điển tài nguyên
- 18. Cách xác định và sử dụng tài nguyên trong xaml để chúng có thể được sử dụng trong C#
- 19. Từ điển sử dụng generics
- 20. Có thể sử dụng từ điển trong C++
- 21. chính đưa ra là không có mặt trong từ điển
- 22. Tài nguyên bộ chọn có thể sử dụng màu được xác định theo kiểu không?
- 23. Tôi có thể sử dụng Danh sách các đối tượng làm Khóa Từ Điển không?
- 24. Không thể lấy tài nguyên từ ứng dụng android
- 25. Điều gì có thể được khởi tạo?
- 26. xác định hoạt ảnh và trình kích hoạt làm tài nguyên có thể sử dụng lại?
- 27. Điều gì sẽ xảy ra nếu các thẻ meta có mặt trong phần thân tài liệu?
- 28. Từ khóa python "có" được sử dụng để làm gì?
- 29. Tải mẫu từ tài nguyên được nhúng
- 30. có thể sử dụng lambda làm từ điển mặc định không?