gpt4 book ai didi

c# - 检查列表中的唯一项 (C#)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:29 26 4
gpt4 key购买 nike

我有一个项目列表。 Item 是一个有两个字段的对象。一个字段的类型是 Dictionary<string, List<string>第二个字段是 int 类型。现在我想检查该列表中是否有一个项目的两个字段都是唯一的。对于 dict 字段,我关心的是关键部分,而不是值(value),因此项目之间的值(value)部分可能相同。它是该列表中必须唯一的键。

如果这样的元素存在,我希望能够获得该元素在我的列表中的位置。

希望它是清楚的。

澄清——

这是我的课

namespace Polstyr
{
class RecordItem
{
Dictionary<string, List<string>> dict;

public string MachineNr { get; set; }

public RecordItem()
{
dict = new Dictionary<string, List<string>>();
}

public void AddToDict(string value, List<string> list)
{
dict.Add(value, list);
}

public Dictionary<string, List<string>> GetDictionary
{
get
{
return dict;
}
}
}

在我代码的其他部分,我有 List<RecordItem> 类型的列表命名的记录项。

我想检查 recordItems 列表中是否存在唯一的 RecordItem 对象基于其字段的列表。 dict 中的 Key 必须是唯一的,MachineNr 必须是唯一的。

提前致谢。

最佳答案

这是一个我认为可行的 LINQ 解决方案。

给定:

class A
{
// your int field
public int Bar{get; set;}

// your dictionary (the value is irrelevant so I've just used bool)
public Dictionary<string, bool> Foo{ get; set; }
}

然后:

var nonUniqueFoo = list.SelectMany(a => a.Foo.Keys)
.GroupBy( s => s)
.Where( g => g.Count() > 1)
.Select(g => g.Key);


var nonUniqueBar = list.Select(a => a.Bar)
.GroupBy( i => i)
.Where( g => g.Count() > 1)
.Select(g => g.Key);

var uniqueObjects = list.Where( a=> !nonUniqueBar.Contains(a.Bar) )
.Where( a => !nonUniqueFoo.Intersect(a.Foo.Keys).Any() )
;

为了完整起见,这是我的测试数据:

List<A> list = new List<A>();
list.Add( new A{ Bar=1, Foo = new Dictionary<string, bool>{ {"123", true} } } );
list.Add( new A{ Bar=2, Foo = new Dictionary<string, bool>{ {"456", true}, {"789", true}, {"567", true} } } );
list.Add( new A{ Bar=3, Foo = new Dictionary<string, bool>{ {"AAA", true}, {"456", true}, {"567", true} } } );

关于c# - 检查列表中的唯一项 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1915436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com