如何将 List<Dictionary<string, byte[]> 对象添加到 Dictionary<string, byte[]> [重复]
Posted
技术标签:
【中文标题】如何将 List<Dictionary<string, byte[]> 对象添加到 Dictionary<string, byte[]> [重复]【英文标题】:How to add List<Dictionary<string, byte[]> object to Dictionary<string, byte[]> [duplicate] 【发布时间】:2019-01-29 11:30:49 【问题描述】:如何将List<Dictionary<string, byte[]>
对象添加到Dictionary<string, byte[]>
public static async void PostUploadtoCloud( List<Dictionary<string, byte[]>> _commonFileCollection)
Dictionary<string, Byte[]> _dickeyValuePairs = new Dictionary<string, byte[]>();
foreach (var item in _commonFileCollection)
_dickeyValuePairs.add(item.key,item.value); // i want this but I am getting
//_dickeyValuePairs.Add(item.Keys, item.Values); so I am not able to add it dictionary local variable _dickeyValuePairs
在 foreach 循环中,我得到了 item.KEYS
和 item.VALUES
,所以我该如何添加它
_dickeyValuePairs
【问题讨论】:
当然你需要一个嵌套的foreach
- item
在你的当前循环中是一个Dictionary<string, byte[]>
。
_commonFileCollection
中的每个item
本身似乎都是一个字典。如果您想使用该字典 within 的项目,看起来您需要一个内部循环。
【参考方案1】:
如果你想合并它们,那么像这样:
public static async void PostUploadtoCloud( List<Dictionary<string, byte[]>> _commonFileCollection)
var _dickeyValuePairs = _commonFileCollection.SelectMany(x=> x).ToDictionary(x=> x.Key, x=> x.Value);
但请注意,如果它们包含相同的键 - 你会得到异常。
为了避免它 - 您可以使用查找(基本上是字典,但在值中它存储集合):
public static async void PostUploadtoCloud( List<Dictionary<string, byte[]>> _commonFileCollection)
var _dickeyValuePairs = _commonFileCollection.SelectMany(x=> x).ToLookup(x=> x.Key, x=> x.Value); //ILookup<string, IEnumerable<byte[]>>
【讨论】:
请注意,如果它们包含相同的键 - 你会得到异常。 - 有什么建议可以避免这种异常吗?【参考方案2】:尝试如下修改循环:
public static async void PostUploadtoCloud(List<Dictionary<string, byte[]>> _commonFileCollection)
Dictionary<string, Byte[]> _dickeyValuePairs = new Dictionary<string, byte[]>();
Byte[] itemData;
foreach (var item in _commonFileCollection)
foreach (var kvp in item)
if (!_dickeyValuePairs.TryGetValue(kvp.Key, out itemData))
_dickeyValuePairs.Add(kvp.Key, kvp.Value);
更新:
外循环将遍历列表中的每个字典,而内循环将遍历字典的每个项目。附加部分_dickeyValuePairs.TryGetValue
将帮助您避免添加重复键时出现异常(如果有)。
【讨论】:
【参考方案3】:在执行此操作时,您需要在代码中采用一些安全措施,像 @Pritish 所说的简单合并由于可能的异常而无法工作,
public static async void PostUploadtoCloud(List<Dictionary<string, byte[]>> _commonFileCollection)
Dictionary<string, Byte[]> _dickeyValuePairs = new Dictionary<string, byte[]>();
try
foreach (var item in _commonFileCollection)
foreach (var kvp in item)
//you can also use TryAdd
if(!_dickeyValuePairs.Contains(kvp.Key))
_dickeyValuePairs.Add(kvp.Key, kvp.Value);
else
//send message that it could not be done?
catch(Exception e)
//log exception
【讨论】:
以上是关于如何将 List<Dictionary<string, byte[]> 对象添加到 Dictionary<string, byte[]> [重复]的主要内容,如果未能解决你的问题,请参考以下文章
C#2.0怎么将dictionary值集合 转换成List<object>,dictionary中键,值类型不定
WPF MVVM 将 Dictionary<String, List<String>> 绑定到数据网格
C# 将 List<string> 转换为 Dictionary<string, string>
将 List<object> 转换为 Dictionary<propertyname,propertyvalue>
无法将 Dictionary<string, List<string>> 转换为 IReadOnlyDictionary<string, IReadOnlyCollect
将 Dictionary<TKey, List<TValue>> 转换为 ReadOnlyDictionary<TKey, ReadOnlyCollection<T