Tôi có hai từ điển loại <string,object>
trong C#. Làm cách nào để sao chép tất cả nội dung của một đối tượng Từ điển sang đối tượng khác mà không áp dụng vòng lặp?Làm cách nào để kết hợp hai từ điển không lặp?
Trả lời
var result = dictionaries.SelectMany(dict => dict)
.ToDictionary(pair => pair.Key, pair => pair.Value);
Bạn có thể sử dụng Concat
:
Dictionary<string, object> d1 = new Dictionary<string, object>();
d1.Add("a", new object());
d1.Add("b", new object());
Dictionary<string, object> d2 = new Dictionary<string, object>();
d2.Add("c", new object());
d2.Add("d", new object());
Dictionary<string, object> d3 = d1.Concat(d2).ToDictionary(e => e.Key, e => e.Value);
foreach (var item in d3)
{
Console.WriteLine(item.Key);
}
Điều này sẽ trả về một chuỗi
Đúng vậy. Cảm ơn bạn đã chỉ ra điều đó. Sẽ chỉnh sửa. –
Đầu tiên, đó là không thể thực hiện mà không cần vòng lặp. Cho dù vòng lặp đó được thực hiện trong một phương thức (mở rộng) là không liên quan, nó vẫn yêu cầu một vòng lặp.
Tôi thực sự sẽ khuyên bạn nên thực hiện thủ công. Tất cả các câu trả lời khác được đưa ra yêu cầu sử dụng hai phương pháp mở rộng (Concat - ToDictionary và SelectMany - ToDictionary) và do đó lặp lại hai lần. Nếu bạn đang làm điều này để tối ưu hóa mã của bạn, sẽ nhanh hơn để lặp lại từ điển B và thêm nội dung đó vào từ điển A.
Chỉnh sửa: Sau khi điều tra thêm, thao tác Concat sẽ chỉ xuất hiện trong Từ điển gọi, nhưng tôi vẫn nghĩ rằng một phương pháp mở rộng tùy chỉnh sẽ hiệu quả hơn.
Nếu bạn muốn giảm kích thước mã của bạn, sau đó chỉ cần thực hiện một phương pháp khuyến nông:
public static class DictionaryExtensions
{
public static IDictionary<TKey,TVal> Merge<TKey,TVal>(this IDictionary<TKey,TVal> dictA, IDictionary<TKey,TVal> dictB)
{
IDictionary<TKey,TVal> output = new Dictionary<TKey,TVal>(dictA);
foreach (KeyValuePair<TKey,TVal> pair in dictB)
{
// TODO: Check for collisions?
output.Add(pair.Key, Pair.Value);
}
return output;
}
}
Sau đó, bạn có thể sử dụng nó bằng cách nhập ('sử dụng') namespace DictionaryExtensions và viết:
IDictionary<string,objet> output = dictA.Merge(dictB);
Tôi đã thực hiện phương pháp hành động như các đối tượng là bất biến, nhưng bạn có thể dễ dàng sửa đổi nó để không trả về một từ điển mới và chỉ nhập vào dictA.
var d3 = d1.Concat(d2).ToDictionary(x => x.Key, x => x.Value);
Điều này hoàn toàn giống với câu trả lời của bruno. –
Simplefied nhưng cùng một câu trả lời có, không phải là một lý do để downvote – RvdK
Xin lỗi nhưng tôi đã đăng trước khi bruno cập nhật câu trả lời của mình để bao gồm các cuộc gọi ToDictionary - trước đó mã đã trở về một IEnumerable
- 1. Làm cách nào để kết hợp hai danh sách vào một từ điển bằng Python?
- 2. Kết hợp nhiều từ điển vào một từ điển đơn
- 3. làm thế nào để nối hai từ điển để tạo một từ điển mới trong Python?
- 4. Làm cách nào để kết hợp các từ điển cùng nhau trong Python?
- 5. Làm cách nào để kết hợp hai ResultSets trong Java?
- 6. Từ điển hai chiều?
- 7. Làm cách nào để kết hợp hai Doctrine 2 ArrayCollection()
- 8. Làm cách nào để kết hợp các từ điển có cùng khóa trong python?
- 9. Cách Pythonic kết hợp hai chuỗi thành một từ điển là gì?
- 10. Làm thế nào để thực hiện mảng kết hợp (không phải từ điển) trong Python?
- 11. Làm cách nào để kết hợp hai bảng trong NHibernate?
- 12. Làm cách nào để kết hợp hai pixel ARGB?
- 13. Làm cách nào để tạo bảng từ điển/bảng băm bằng cách lặp qua một cột?
- 14. Làm thế nào để bạn kết hợp hai repo git?
- 15. Làm cách nào để kết hợp/hợp nhất các cột từ hai kết quả truy vấn SQL?
- 16. Làm cách nào để kết hợp các tập hợp kết quả từ hai cuộc gọi thủ tục được lưu trữ?
- 17. Lặp lại từ điển VBA?
- 18. Từ điển python phù hợp với các giá trị khóa trong hai từ điển
- 19. TypeScript, Lặp qua từ điển
- 20. Có cách nào tốt hơn để tổng hợp từ điển bằng LINQ không?
- 21. Làm cách nào để lặp lại từ điển Python, được sắp xếp theo giá trị?
- 22. Làm cách nào để lặp qua từ điển và thay đổi giá trị?
- 23. Làm cách nào để tôi có thể lặp qua các từ điển lồng nhau với JSON.NET?
- 24. Kết hợp hai video từ ffmpeg
- 25. PHP: Làm thế nào để kết hợp hai lớp này?
- 26. Từ điển có hai phím?
- 27. Làm thế nào để kết hợp hai mảng byte
- 28. Làm thế nào để kết hợp hai procs thành một?
- 29. Làm thế nào để kết hợp hai chuỗi trong cành?
- 30. Làm cách nào để sửa đổi/hợp nhất từ điển Jinja2?
Tên loại trong câu hỏi của bạn dường như đã chuyển sang AWOL. – dommer
nếu bạn đang tìm kiếm một sự hợp nhất, bạn nên tham khảo: http://stackoverflow.com/questions/294138/merging-dictionaries-in-c – annakata