有几个
如果它们是列表,我会这样做:
然而,它们并不是列表,而是IEnumerables,这是很重要的,因为项目是在一个繁重的计算中按需计算的,所以一次计算所有项目所需的时间比仅按需获取有限数量的项目更长。
我如何在使用IEnumerable而不是List的情况下获得相同的行为?
编辑:在我的特定用例中,对集合的枚举将继续,直到枚举所有集合的所有元素为止。如果元素计数不同,已经完全枚举的集合将被跳过。
IEnumerable<T>
的实例,我想先获取每个实例的第一个元素,然后是第二个元素,依此类推。如果它们是列表,我会这样做:
List<List<T>> myLists = ...;
bool iLessThanMaxSize = true;
for (int i=0; iLessThanMaxSize; i++)
{
iLessThanMaxSize = false;
for (int j=0; j<myLists.Count; j++)
{
if (i < myLists[j].Count)
{
iLessThanMaxSize = true;
yield return myLists[j][i];
}
}
}
然而,它们并不是列表,而是IEnumerables,这是很重要的,因为项目是在一个繁重的计算中按需计算的,所以一次计算所有项目所需的时间比仅按需获取有限数量的项目更长。
我如何在使用IEnumerable而不是List的情况下获得相同的行为?
编辑:我所说的“同时”并不是指多线程,而只是枚举的模式,即先获取每个集合的第一个元素,然后获取每个集合的第二个元素,而不是先枚举第一个集合,然后再枚举第二个集合,依此类推(这将是将IEnumerables连接起来)。对于造成的混淆,我表示抱歉。
编辑:在我的特定用例中,对集合的枚举将继续,直到枚举所有集合的所有元素为止。如果元素计数不同,已经完全枚举的集合将被跳过。
List<IEnumerable<T>>
还是IEnumerable<IEnumerable<T>>
? - undefinedList<IEnumerable<T>>
。 - undefined