分区列表<T>?

pow*_*tte 3 c# linq collections partitioning

我有一个很大的对象列表,我有时需要迭代整个列表,有时我只想查看.Property ="somevalue"的对象.

目前我查看我的集合.Where(_ => _.Property="value_i_need"),如果我加载了100k对象并且只有少数人在我的目标组中,那么这个集合很昂贵.

所以我想要做的是将列表分段保存为Dictionary<string, List<T>>可以快速引用我想要的对象集,但是如果我这样做,如何使用Linq枚举所有字典中的所有对象使用更多内存来维护常规列表?

Jon*_*eet 9

那听起来你想要一个Lookup:

var lookup = list.ToLookup(x => x.Property);
Run Code Online (Sandbox Code Playgroud)

您可以通过展平来轻松迭代整个集合:

foreach (var entry in lookup.SelectMany(x => x))
{
}
Run Code Online (Sandbox Code Playgroud)

...但这不会在初始列表顺序中(除非你很幸运:)如果你需要保持原始列表顺序,你需要做更多的工作......