C# 如何从列表中的列表检索不同值的列表
我有一个对象列表,每个对象中都包含一个ID列表 下面的代码创建一个包含10个成员的列表,然后在每个成员中创建一个包含5个随机ID的列表C# 如何从列表中的列表检索不同值的列表,c#,linq,distinct,C#,Linq,Distinct,我有一个对象列表,每个对象中都包含一个ID列表 下面的代码创建一个包含10个成员的列表,然后在每个成员中创建一个包含5个随机ID的列表 public class Member { List<int> Ids { get; set; } public Member() { Ids = new List<int>(); } } var rnd = new Random(); var container = new List&
public class Member
{
List<int> Ids { get; set; }
public Member()
{
Ids = new List<int>();
}
}
var rnd = new Random();
var container = new List<Member>();
// Add members with random Ids
for ( int i = 1; i <= 10; i++ ){
var member = new Member();
for ( int j = 1; j <= 5; j++ ){
member.Ids.Add( rnd.Next(100) );
}
}
var distinctIds = ?????;
公共类成员
{
列表ID{get;set;}
公职人员()
{
Ids=新列表();
}
}
var rnd=新随机数();
var container=新列表();
//添加具有随机ID的成员
对于(int i=1;i
当然还有method-y语法,在本例中使用SelectMany
:
var distinctIds = container.SelectMany(member => member.Ids).Distinct();
但是我不记得如何调用它,所以我通常更喜欢从
s中调用多个。只是一个提示,您实际上只是创建了9个成员和4个ID。这与您的问题无关:)有效:)我更改了演示代码您可能会在循环中获得重复的值,用于分配随机ID。在紧循环中调用rnd.Next()
可能会导致重复(不确定您是否同意,但我想我会指出)。@bryancrossby“在紧循环中调用rnd.Next()可能会导致重复”-不确定您在这里指的是什么。当然,.Next(int)
可能会在两次连续调用中返回相同的内容(如果可以保证某个特定值不会出现,则不能说它是随机的),但循环的紧密性与此无关?您还可以传入一个IEqualityComparer对象,以决定如何将该类型称为distinct。。。虽然使用整数/字符串,但其默认值已经足够好了。
var distinctIds = container.SelectMany(member => member.Ids).Distinct();