- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个序列 IGrouping
IEnumerable<IGrouping<Key, Element>> sequence = ...;
和谓词
Func<Element, bool> predicate = ...;
如何过滤Element
s 通过将结果保持为 IEnumerable<IGrouping<Key, Element>>
无需展平序列并完全重新创建分组?
我可以做类似的事情
IEnumerable<IGrouping<Key, Element>> filtered =
from grouping in sequence
from element in grouping
where predicate(element)
select new { grouping.Key, element } into keyElem
group keyElem.element by keyElem.Key into g
select g;
但是,根据序列的大小和涉及的类型,这将需要一些时间和/或内存。
我想“简单地”过滤 IGrouping
内的元素s。我会接受结果中的空分组。
(我认为这个问题可以通过回答如何过滤 IEnumerable<IEnumerable<Element>>
的元素同时保持结果 IEnumerable<IEnumerable<Element>>
的问题来回答。)
最佳答案
您无法修改现有的 IGrouping
,但您可以轻松创建自己的实现和辅助方法:
public static class Groupings
{
public static IGrouping<TKey, TElement>
FilterElements<TKey, TElement>(
this IGrouping<TKey, TElement> grouping,
Func<TElement, bool> predicate) =>
new LateGrouping<TKey, TElement>(grouping.Key, grouping.Where(predicate));
}
internal class LateGrouping<TKey, TElement> : IGrouping<TKey, TElement>
{
public TKey Key { get; }
private readonly IEnumerable<TElement> elements;
public LateGrouping(TKey key, IEnumerable<TElement> elements)
{
Key = key;
this.elements = elements;
}
public IEnumerator<TElement> GetEnumerator() => elements.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
然后你就可以拿你的IEnumerable<IGrouping<...>>
并使用正常的选择,在内部进行过滤:
groupings = groupings.Select(g => g.FilterElements(predicate));
关于c# - 如何通过保留 IGrouping 来过滤 IGrouping 的 IEnumerable 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52000844/
我有一个序列 IGrouping IEnumerable> sequence = ...; 和谓词 Func predicate = ...; 如何过滤Element s 通过将结果保持为 IEnum
我有一个序列 IGrouping IEnumerable> sequence = ...; 和谓词 Func predicate = ...; 如何过滤Element s 通过将结果保持为 IEnum
尝试使用 Automapper 对按两个属性分组的分组查询进行投影时出现以下错误 Missing map from IGrouping`2 to PlayerWarScore. Create usin
我想使用 Linq 创建一个函数来汇总传入的值序列。该函数应如下所示: IDictionary> Summarize(IEnumerable values) { return values
我有一个 LINQ 问题,这让我有点困惑。我可以看到很多替代方法来找到解决方案,但我想尝试解决问题,因为它困扰着我! public enum AnimalType { Cat, Dog
我有一个 IGrouping 类型的对象,想在不更改对象类型的情况下对组内的元素进行排序。 换句话说,我有 var tmp = group.OrderBy(x => x); 与 group类型 IGr
大家好。 假设我有以下类(class): public class ObjectA { public string PropertyA { get; set; }
我有一些代码可以创建列表列表。该列表是这种类型的: List> GroupedDeviceList = new List>(); 但需要返回如下类型的结果: IEnumerable> 这是否可以通
我一直在查看此处的其他线程以了解如何在 linq 中执行 GroupBy。我正在遵循适用于其他人的 EXACT 语法,但它不起作用。 这是查询: var results = from p in pen
我正在尝试创建一个 WCF 数据服务 ServiceOperation,它在服务器端进行分组,然后将数据发送到客户端。 当我尝试调用它(甚至连接到该服务)时,出现错误。它说它不能构造接口(interf
在 IEnumerable包含定义为: class Appointment { public string Name { get; set; } public DateTime LastMod
我目前有: UIEnumerable > 从这段代码: var queryDupFiles = from file in fileList group file by new Portable
IEnumerable> datas = list.GroupBy(x => x.PropertyXYOfMyClass); // get all items from each group fore
我目前有: UIEnumerable > 从这段代码: var queryDupFiles = from file in fileList group file by new Portable
IEnumerable> datas = list.GroupBy(x => x.PropertyXYOfMyClass); // get all items from each group fore
我有两个类: class Foo { public Bar SomeBar { get; set; } } class Bar { public string Name { get;
IGrouping 支持 ElementAt 方法来索引分组的集合。那么为什么方括号运算符不起作用呢? 我可以做类似的事情 list.GroupBy(expr).Select(group => gr
如何直接从 IGrouping 中删除对象 IGrouping ? 目前我所知道的唯一方法是生成一个没有相关元素的新 IGrouping,但我不喜欢这种方式,因为它会在我的应用程序中引起一些麻烦。 有
我已经在列表上应用了 IGrouping<> - 它看起来像这样: IEnumerable> Tiers { get { return ActiveNodes.GroupBy(x => new
这个问题在这里已经有了答案: ILookup vs. IGrouping (3 个答案) 关闭 9 年前。 ILookup 和 IGrouping 是非常相似的 Linq 接口(interface)
我是一名优秀的程序员,十分优秀!