Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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#_Arrays_List - Fatal编程技术网

C# 在循环的每个步骤中将一个大列表划分为两个数组

C# 在循环的每个步骤中将一个大列表划分为两个数组,c#,arrays,list,C#,Arrays,List,我在一维数组中有一个大的单位数列表,如下所示: list=[0,0,0,3,1,1,0,0,0,1,2,,........] 我想将列表分为两个数组(A和B),它们将接受小数据流, 这样,从开头开始,所有0和第一个非零数字都会进入数组“A”[0],并且所选数字的编号会记录在任何变量中,例如马克萨 这会让事情看起来像下面这样 A[0]=[0,0,0,3] maxa = 4 接下来的数字(maxa-1)将进入数组B[0] 所以b应该是这样的 B[0]=[1,1,0] 现在,这将继续,直到我

我在一维数组中有一个大的单位数列表,如下所示:

list=[0,0,0,3,1,1,0,0,0,1,2,,........]
我想将列表分为两个数组(A和B),它们将接受小数据流, 这样,从开头开始,所有0和第一个非零数字都会进入数组“A”[0],并且所选数字的编号会记录在任何变量中,例如马克萨 这会让事情看起来像下面这样

A[0]=[0,0,0,3]

maxa = 4
接下来的数字(maxa-1)将进入数组B[0] 所以b应该是这样的

B[0]=[1,1,0] 
现在,这将继续,直到我的列表数组中的所有no都用完

我正在使用下面的逻辑,但已经走到了死胡同。谁能帮我一下吗

for (int ii = 0; ii < file.Count; ii++)
        {
            if (file.ElementAt(ii) == 0)
            {
                A[ii] = file.ElementAt(ii);
                count++;
            }
            else
            {
                A[ii] = file.ElementAt(ii);
                count++;
            }
      }
for(int ii=0;ii
由于
文件
具有
计数
属性,我假设它可能是一个
列表
。如果是这种情况,您应该使用
file[ii]
而不是
file.ElementAt(ii)
来访问其元素

另一方面,您不应该使用索引器来分配给
A
B
(除非它们是预分配的数组)。相反,让它们成为可以使用
Add
动态追加整数的
列表
实例

List<int> a = new List<int>();
List<int> b = new List<int>();

// The index along "file" we are currently reading.
int i = 0;

// Loop until the end of "file".
while (i < file.Count)
{
    // The index corresponding to the beginning of the current run of "A".
    int aStart = i;

    // Add first element to "A".
    a.Add(file[i++]);

    // Keep adding elements to "A" as long as predecessor was 0.
    while (file[i - 1] == 0 && i < file.Count)
        a.Add(file[i++]);

    // Calculate how many elements need to be added to "B"
    // (i.e. one less than how many were added to "A").
    int bTarget = i - aStart - 1;

    // Add that many elements to "B".
    while (bTarget-- > 0 && i < file.Count)
        b.Add(file[i++]);
}
List a=新列表();
列表b=新列表();
//我们当前正在读取的“文件”的索引。
int i=0;
//循环直到“文件”结束。
而(i0&&i
您的代码没有分配到
B
。另外,请您给出定义列表上
A
B
的完整预期结果`两个数组A和B每次采用不同的流,始终以零开始,一个样本不为零,B所有元素在小于一的流之后:list=[0,0,1,1,1,0,0,0,2,2,1,0]因此A在第一步中采用A=[0,0,1]而B=[1,1]在第二步中,A取A=[0,0,0,2]和B=[2,1,0]
,B取小于1的流后的所有元素-如果
B
取的元素小于1,为什么有
2,1,0
?也许我早上太笨了…list=[0,0,1,1,1,1,0,0,2,2,1,0]用你的逻辑拆分这个列表,请。@HamletHakobyan:第一次运行:
A:0,0,1
(读取到第一次非零;总计:三次)<代码>B:1,1
(读取三减一元素)。第二次运行:
A:1
(读取到第一次非零;总计:1)<代码>B:(读取一减一的元素)。第三次运行:
A:0,0,2
(读取到第一次非零;总计:三次)<代码>B:2,1(读取三减一元素)。第四次运行:
A:0
(读取到第一次非零;但我们到达文件末尾)。
始终以零开始。谢谢道格拉斯,你理解我,我尝试了你的代码,它正在工作,谢谢你的支持everybody@HamletHakobyan:实际上,
总是以零开始,一个样本不是零
。你需要推断OP想要说什么。使用类似正则表达式的表示法(假设为一位数),它将是
0*[1-9]