Làm cách nào để xóa một mục khỏi danh sách KeyValuePair?C# - Xóa một mục khỏi danh sách KeyValuePair
Trả lời
Nếu bạn có cả chìa khóa và giá trị mà bạn có thể làm như sau
public static void Remove<TKey,TValue>(
this List<KeyValuePair<TKey,TValue>> list,
TKey key,
TValue value) {
return list.Remove(new KeyValuePair<TKey,TValue>(key,value));
}
này hoạt động vì KeyValuePair<TKey,TValue>
không ghi đè lên bình đẳng nhưng là một struct. Điều này có nghĩa là nó sử dụng bình đẳng giá trị mặc định. Điều này đơn giản so sánh các giá trị của các trường để kiểm tra tính bình đẳng. Vì vậy, bạn chỉ cần tạo một phiên bản KeyValuePair<TKey,TValue>
mới với cùng các trường.
EDIT
Để đáp ứng với một commenter, những gì giá trị không một phương pháp mở rộng cung cấp ở đây?
Sự biện minh được nhìn thấy rõ nhất trong mã.
list.Remove(new KeyValuePair<int,string>(key,value));
list.Remove(key,value);
Cũng trong trường hợp loại khóa hoặc giá trị là loại ẩn danh, cần có phương pháp tiện ích mở rộng.
EDIT2
Dưới đây là một ví dụ về cách để có được KeyValuePair mà một trong 2 có một loại vô danh.
var map =
Enumerable.Range(1,10).
Select(x => new { Id = x, Value = x.ToString() }).
ToDictionary(x => x.Id);
Bản đồ biến là Dicitonary<TKey,TValue>
trong đó TValue
là một loại ẩn danh. Việc liệt kê bản đồ sẽ tạo ra một KeyValuePair với TValue
là cùng một loại vô danh.
Nên có thể sử dụng .Remove(), .RemoveAt() hoặc một trong các phương pháp khác.
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
KeyValuePair<string, string> kvp = list[i];
list.Remove(kvp);
hoặc
list.Remove(list[1]);
Bạn phải có một tham chiếu đến đối tượng mà bạn muốn loại bỏ - đó là lý do tại sao tôi tìm thấy mục Tôi đang tìm kiếm và được gán cho một KeyValuePair - kể từ khi bạn đang nói nó để loại bỏ một mục cụ thể.
Một giải pháp tốt hơn có thể được sử dụng một từ điển:
Dictionary<string, string> d = new Dictionary<string, string>();
if (d.ContainsKey("somekey")) d.Remove("somekey");
này cho phép bạn loại bỏ bởi các giá trị quan trọng thay vì phải đối phó với những danh sách không được lập chỉ mục bởi chìa khóa.
Chỉnh sửa trước tiên bạn có thể không phải lấy tham chiếu KeyValuePair. Tuy nhiên, một từ điển có lẽ là một cách tốt hơn để đi.
Để loại bỏ tất cả các mục trong danh sách bằng chính:
myList.RemoveAll(x => x.Key.Equals(keyToRemove));
Mặc dù không phải là câu trả lời được giải thích tốt nhất, điều này sẽ trong hầu hết các trường hợp thực sự làm các trick khi bạn có giá trị của chìa khóa để làm việc với. –
Dưới đây là một vài ví dụ về cách loại bỏ một mục từ một danh sách các KeyValuePair:
// Remove the first occurrence where you have key and value
items.Remove(new KeyValuePair<int, int>(0, 0));
// Remove the first occurrence where you have only the key
items.Remove(items.First(item => item.Key.Equals(0)));
// Remove all occurrences where you have the key
items.RemoveAll(item => item.Key.Equals(0));
EDIT
// Remove the first occurrence where you have the item
items.Remove(items[0]);
- 1. C# xóa các mục khỏi danh sách
- 2. C# Xóa danh sách khỏi danh sách
- 3. Xóa mục khỏi danh sách
- 4. xóa mục khỏi danh sách weak_ptrs
- 5. Xóa lần cuối n Mục khỏi Danh sách bằng C#
- 6. Xóa mục danh sách khỏi DropDownList
- 7. Xóa mục khỏi danh sách bằng linq
- 8. Python - xóa các mục khỏi danh sách
- 9. Xóa mục khỏi Danh sách và nhận mục đồng thời
- 10. Cách xóa một mục khỏi danh sách chung
- 11. xóa các mục khỏi Danh sách chung <t>
- 12. Hibernate: Xóa mục khỏi Danh sách không tồn tại
- 13. Python: Cách xóa danh sách trống khỏi danh sách?
- 14. Xóa các mục đã chọn khỏi hộp danh sách
- 15. Xóa danh sách khỏi danh sách bằng Python
- 16. C Xóa nút khỏi danh sách được liên kết
- 17. Xóa danh sách các đối tượng khỏi danh sách khác
- 18. xóa danh sách phụ khỏi danh sách trong tcl
- 19. Xóa các mục khỏi danh sách 1 không có trong danh sách 2
- 20. Xóa YourSelf khỏi danh sách ShareActionProvider
- 21. Xóa phần tử khỏi danh sách chung
- 22. Xóa các mục khỏi một danh sách trong một số khác
- 23. Trong Python, làm cách nào để xóa mục danh sách thứ N từ danh sách danh sách (xóa cột)?
- 24. Xóa tất cả các giá trị trong một danh sách khỏi một danh sách khác?
- 25. Python - kiểm tra trên một sợi/xóa khỏi danh sách
- 26. Xóa mục khỏi ListBox?
- 27. Xóa một mục khỏi danh sách khớp với chuỗi con - Python
- 28. Tìm hiểu Haskell: Cách xóa một mục khỏi Danh sách trong Haskell
- 29. cách xóa chuỗi rỗng khỏi danh sách, sau đó xóa giá trị trùng lặp khỏi danh sách
- 30. Xóa các phần tử khỏi danh sách ràng buộc
Ngoài một vài lỗi cú pháp, giá trị này là phương pháp mở rộng có ý định p rovide? –
@Derek, loại bỏ sự cần thiết phải chỉ định bất kỳ đối số chung nào cho định nghĩa kiểu khi thực hiện xóa. list.Remove (khóa, giá trị) so với list.Remove (new KeyValuePair (khóa, giá trị)). Trước đây là ngắn gọn hơn nhiều. Đừng nghĩ rằng -1 là xứng đáng với lỗi cú pháp nhỏ –
JaredPar
Tôi đã bỏ phiếu cho câu trả lời này vì tôi không cảm thấy việc sử dụng một phương pháp mở rộng đã cung cấp câu trả lời rõ ràng, ngắn gọn hoặc giá trị gia tăng, không phải do lỗi cú pháp. –