Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C LINQ,转换嵌套在foreach中的多个并行for循环_C#_Linq - Fatal编程技术网

C# C LINQ,转换嵌套在foreach中的多个并行for循环

C# C LINQ,转换嵌套在foreach中的多个并行for循环,c#,linq,C#,Linq,我的目标是掌握LINQ库函数 我的问题是,如何在SelectMany迭代中调用多个Selects 考虑以下代码: foreach(var i in array){ for(int i=0; i<10; i++) yield return someOtherArray[i]; for(int i=0; i<10; i++) yield return someOtherArray[i]; } 但我究竟如何在selectMany范围内的另一

我的目标是掌握LINQ库函数

我的问题是,如何在SelectMany迭代中调用多个Selects

考虑以下代码:

foreach(var i in array){
    for(int i=0; i<10; i++) 
       yield return someOtherArray[i];
    for(int i=0; i<10; i++) 
       yield return someOtherArray[i];
}
但我究竟如何在selectMany范围内的另一个分离的内部for循环上运行呢

编辑1

我需要在父数组中运行2个数组

foreach(var i in array) {
    for(int i=0; i<10; i++) 
        yield return someOtherArray_A[i];
    for(int i=0; i<10; i++) 
        yield return someOtherArray_B[i];
}
编辑2

为更改了这么多输入而道歉,我正试图让它更接近我真正的问题

 foreach(var j in array) {
     for(int i=0; i<20; i++) 
         yield return someOtherArray_A[i];
     for(int i=0; i<10; i++) 
         yield return someOtherArray_B[i];
 }

您当前的代码没有多大意义。现在,如果我改变你的代码,让它变得有意义,例如,它可能是这样的

foreach(var item in array){
    for(int i=0; i<10; i++) 
       yield return item.someArray[i];
    for(int i=0; i<10; i++) 
       yield return item.someOtherArray[i];
}

您可以使用.SelectMany将内部序列组合成一个较长的序列,也可以使用.Concat将两个序列粘合在一起,并将其作为一个序列使用。

您当前的代码没有多大意义。现在,如果我改变你的代码,让它变得有意义,例如,它可能是这样的

foreach(var item in array){
    for(int i=0; i<10; i++) 
       yield return item.someArray[i];
    for(int i=0; i<10; i++) 
       yield return item.someOtherArray[i];
}

您可以使用.SelectMany将内部序列组合为一个较长的序列,也可以使用.Concat将两个序列粘合在一起,并将其作为一个序列使用。

使用@Maarten的合理版本代码:

foreach(var item in array){
    for(int i=0; i<10; i++) 
       yield return item.someArray[i];
    for(int i=0; i<10; i++) 
       yield return item.someOtherArray[i];
}
这将返回内部数组具有的任何类型的IEnumerable。 现在我们要对外部数组中的所有项执行此操作,并将其作为单个序列返回,这正是SelectMany所做的:


使用@Maarten的合理版本代码:

foreach(var item in array){
    for(int i=0; i<10; i++) 
       yield return item.someArray[i];
    for(int i=0; i<10; i++) 
       yield return item.someOtherArray[i];
}
这将返回内部数组具有的任何类型的IEnumerable。 现在我们要对外部数组中的所有项执行此操作,并将其作为单个序列返回,这正是SelectMany所做的:



你看过Union来组合多个选择的输出吗?不是Union,而是CONCATT这整个代码对我来说没有任何意义,它甚至无法编译!。你到底想做什么?我想如果你给出一个什么数组,其他数组A和其他数组B的例子会更有用,然后告诉我们你想要什么输出。你有没有看Union来组合多个选择的输出?不是Union,而是CONCATT整个代码对我来说没有任何意义,它甚至没有编译!。你到底想做什么?我想如果你举一个例子说明数组,someOtherArray\u A和someOtherArray\u B包含什么,会更有用,然后告诉我们您想要什么输出。我不太确定在每次迭代中如何使用Take-in从两个数组返回值example@USS-蒙大拿,这是一个不同的问题。@USS Montana您的原始循环甚至没有执行您在评论中所说的内容。@USER 3185569我在每次迭代中都会从somearray_a和中产生一个值从somearray_B同步生成值。。。看见edit@USS-蒙大拿不,你从其他人那里得到10件物品,一件接一件,然后在这10件物品完成后,你一个接一个地从someOtherArray\u中得到10个项目。我不太清楚在每次迭代中如何使用Take in从两个数组中返回一个值example@USS-蒙大拿州,这是一个不同的问题。@USS Montana,您的原始循环甚至没有执行您在评论中所说的内容。@USER 3185569我在每次迭代中都会产生一个值从somearray_A同步生成来自somearray_B的值。。。看见edit@USS-蒙大拿不,你从其他数组中一个接一个地产生10个项目,然后在这10个项目完成后,你从其他数组中一个接一个地产生10个项目。如果数组<10个项目,那么这里的行为并不完全相同,但因为OP正在了解这一点,我认为这个版本在一般意义上更好。如果数组的itemsTrue小于10,那么这里的行为就不太一样了,但是由于OP正在了解这一点,我认为这个版本在一般意义上更好。
    item.someArray.Take(10)                // the first 10 elements of this array
        .Concat(                           // followed by
            item.someOtherArray.Take(10)); // the first 10 elements of this array
} 
array.SelectMany(item => item.someArray.Take(10).Concat(item.SomeOtherArray.Take(10)));