如何同时迭代多个 IEnumerable
假设我有两个(或更多)带有许多元素的 IEnumerable
。每个 IEnumerable
都有另一种类型 T
。这些列表可能非常长,不应完全加载到内存中。
IEnumerable<int> ints = getManyInts();
IEnumerable<string> strings = getSomeStrings();
IEnumerable<DateTime> dates = getSomeDates();
我想要做的是迭代这些列表,并为每一步获取一个包含一个 int、一个字符串和一个 DateTime 的项目,直到到达最长或最短列表的末尾。这两种情况都应该支持(布尔参数最长与最短左右)。对于较短列表中不可用的每个项目(因为已经到达末尾),我希望使用默认值。
for(Tuple<int,string,DateTime> item in
Foo.Combine<int,string,DateTime>(ints, strings, dates))
{
int i=item.Item1;
string s=item.Item2;
DateTime d=item.Item3;
}
是否可以通过使用延迟执行的 linq 来做到这一点? 我知道直接使用 IEnumerators 与收益回报相结合的解决方案。 请参阅如何在 .NET 2 中同时迭代两个 IEnumerable
Assume I have two (or more) IEnumerable<T>
with many elements. Every IEnumerable
has another type T
. The lists can be extreme long and should not be loaded to memory completetly.
IEnumerable<int> ints = getManyInts();
IEnumerable<string> strings = getSomeStrings();
IEnumerable<DateTime> dates = getSomeDates();
What I want to do is to iterate over these lists, and get an item containing one int, one string and one DateTime for each step, until the end of the longest or the shortest list has been reached. Both cases should be supported (bool param longest vs. shortest or so). For every item unavailable in the shorter lists (because the end has already been reached) I'd expect default values.
for(Tuple<int,string,DateTime> item in
Foo.Combine<int,string,DateTime>(ints, strings, dates))
{
int i=item.Item1;
string s=item.Item2;
DateTime d=item.Item3;
}
Is it possible to do this with linq using deferred execution?
I know the solution using IEnumerators directly combined with yield return.
See How can I iterate over two IEnumerables simultaneously in .NET 2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
像这样的事情应该可以做到(警告-未经测试):
Something like this should do it (warning- untested):