Занесение положительных чисел из одного массива в другой

Нужно перебрать массив так что бы в положительные числа в Ri[] заносились в массив R[]

using System;

namespace ConsoleApp11
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] Ri = {-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
            int[] R = new int[7];
            int[] E = R;

            
        }
    }
}

Ответы (2 шт):

Автор решения: Nyuhnyash

Вариант решения с использованием System.Linq:

int[] R = Ri.Where(element => element > 0).ToArray();

Если заранее известно, что массив отсортирован по возрастанию:

int[] R = Ri.SkipWhile(element => element <= 0).ToArray();
→ Ссылка
Автор решения: A K

Мне больше нравится linq-вариант, но чисто по-классике (способ для учителя) это решается при помощи динамических массивов, коими в C# будем считать List:

var Ri = new[] { -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
var list = new List<int>();

foreach (var element in Ri)
{
    if (element > 0)
        list.Add(element);
}

var R = new int[list.Count];
list.CopyTo(R);

Еще можно без списка, но потребуется пройтись по массиву дважды:

var Ri = new[] { -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int count = 0;

foreach (var element in Ri)
{
    if (element > 0)
        count++;
}

var R = new int[count];

int j = 0;
for (int i = 0; i < Ri.Length; i++)
{
    if (Ri[i] > 0)
        R[j++] = Ri[i];
}

Если заранее известно, что массив отсортирован по возрастанию, то можно так:

var Ri = new[]{-15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
var R = new int[0];
for (var i = 0; i < Ri.Length; i++)
{
    if (Ri[i] > 0)
    {
        R = new int[Ri.Length - i];
        Array.Copy(Ri, i, R, 0, R.Length);
        break;
    }
}
→ Ссылка