.net List<Dictionary<string,object>> 去重
时间: 2023-12-11 10:02:35 浏览: 141
你可以使用 LINQ 进行去重。以下是一个示例代码:
```csharp
List<Dictionary<string, object>> list = GetList(); // 假设这是你的列表
List<Dictionary<string, object>> distinctList = list
.Select(d => JsonConvert.SerializeObject(d))
.Distinct()
.Select(json => JsonConvert.DeserializeObject<Dictionary<string, object>>(json))
.ToList();
```
这里的 `JsonConvert` 是 Newtonsoft.Json 库中的,它可以将 `Dictionary<string, object>` 对象序列化成 JSON 字符串,然后使用 LINQ 进行去重,最后再将 JSON 字符串反序列化为 `Dictionary<string, object>` 对象。
需要注意的是,这种方法可能会影响性能,因为它需要将每个 `Dictionary<string, object>` 对象序列化为 JSON 字符串。如果你的列表很大,可能会导致性能问题。
相关问题
C# List<Dictionary<string,object>> 去重
你可以使用 LINQ 来对 `List<Dictionary<string, object>>` 去重。以下是一个示例代码:
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<Dictionary<string, object>> myList = new List<Dictionary<string, object>>();
// 添加示例数据
Dictionary<string, object> dict1 = new Dictionary<string, object>();
dict1.Add("Key", 1);
dict1.Add("Value", "A");
myList.Add(dict1);
Dictionary<string, object> dict2 = new Dictionary<string, object>();
dict2.Add("Key", 2);
dict2.Add("Value", "B");
myList.Add(dict2);
Dictionary<string, object> dict3 = new Dictionary<string, object>();
dict3.Add("Key", 1); // 与 dict1 的 Key 相同
dict3.Add("Value", "C");
myList.Add(dict3);
// 去重
List<Dictionary<string, object>> distinctList = myList
.GroupBy(dict => dict["Key"])
.Select(group => group.First())
.ToList();
// 输出去重后的结果
foreach (var dict in distinctList)
{
Console.WriteLine($"Key: {dict["Key"]}, Value: {dict["Value"]}");
}
}
}
```
这段代码使用 `GroupBy` 方法按照字典中的 "Key" 进行分组,并通过 `Select` 方法选择每个组中的第一个字典,从而实现去重操作。输出结果为:
```
Key: 1, Value: A
Key: 2, Value: B
```
注意,这里假设字典中的 "Key" 是可以用于比较相等性的,如果你的字典中有其他复杂类型的值,你可能需要自定义比较器来进行去重。
Dictionary<string, Object> p = new Dictionary<string, object>(); List<Dictionary<string, Object>> list = new List<Dictionary<string, object>>(); Dictionary<string, Object> data1 = new Dictionary<string, object>(); data1.Add("EBELP ", "xxxxxx"); list.Add(data1); Dictionary<string, Object> data2 = new Dictionary<string, object>(); data2.Add("EBELP ", "xxxxxx"); p.Add(" list ", list),如果是这样的话怎么取出来List<Dictionary<string, object>>类型的list?
要取出 `List<Dictionary<string, object>>` 类型的 `list`,你可以使用以下代码:
```csharp
List<Dictionary<string, Object>> list = (List<Dictionary<string, Object>>)p["list"];
```
在这里,我们使用 `p["list"]` 来访问存储在 `p` 中键为 `"list"` 的值,这个值是一个 `List<Dictionary<string, Object>>` 类型。由于这个值是一个 object 类型的对象,我们需要使用显式类型转换将其转换为 `List<Dictionary<string, Object>>` 类型,然后将其存储在 `list` 变量中。
注意,这里的键名 `"list"` 应该和添加键值对时使用的键名一致,包括大小写。如果键名不一致,将无法取出正确的值。
阅读全文