Занесение положительных чисел из одного массива в другой
Нужно перебрать массив так что бы в положительные числа в 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;
}
}