繁体   English   中英

如何从列表中删除不包含与Dictionary中的值匹配的对象的实例?

[英]How to remove instances from a List, which don't contain objects that match values from a Dictionary?

我使用LINQ想到了这一点:

records.RemoveAll(x => 
    !(x.MyList.Contains(values[0]) || x.MyList.Contains(values[1]) || x.MyList.Contains(values[2]) || ... )
);
  • records是一个List<CustomObject> ,它具有一个List<string> MyList
  • values是一个OrderedDictionary ,但如果有不需要按索引访问它的解决方案,则可以很容易地是Dictionary<string,string>

这段代码的问题是我不知道values的大小,也无法像这样硬编码它。 有没有办法在这里使用for或foreach循环? 或者,我还能如何实现这一行代码?

我认为这将是

records.RemoveAll(x => 
    !(values.Any(v=>x.MyList.Contains(v)))
);

尝试这个:

var values = new OrderedDictionary()
{
    { "A", null },
    { "B", null },
    { "C", null },
    { "D", null },
    { "E", null },
};
var records = new List<CustomObject>
{
    new CustomObject{ Id = 1, MyList = new List<string>(){ "A", "B" }},
    new CustomObject{ Id = 2, MyList = new List<string>(){ "C", "F" }},
    new CustomObject{ Id = 3, MyList = new List<string>(){ "G", "H" }}
};

records.RemoveAll(record => !record.MyList.Any(item => values.Contains(item)));
foreach (var record in records)
{
    Console.WriteLine("Id={0}, MyList={1}",
        record.Id, String.Join(", ", record.MyList.ToArray()));
}

这也可以...

records.Except(values.Select(v => v.Value)).ToList().ForEach(a => records.Remove(a.ToString())) ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM