Переписать код обработки массива без использования стандартных функций - C#
Формулировка задачи:
Всем привет, дан код и надо реализовать поэлементную обработку массива, или же расписать стандартные функции
Всего 2 программы, со стандартными функциями я знаю как это происходит, а вот чтобы без них, пёс его знает, не знаю)
static int[] process(int[] mas)
{
int mS = Series2(mas).Max(s => s.Length);
return Series2(mas)
.SelectMany(s => s.Length == mS ? s.Concat(new[] { s[0] }) : s)
.ToArray();
}static void pr (ref int [] a, out int [] b)
{
b = a.Distinct().ToArray();
}Решение задачи: «Переписать код обработки массива без использования стандартных функций»
textual
Листинг программы
private static int Max<TSource>(IEnumerable<TSource> source, Func<TSource, int> selector)
{
int max = int.MinValue;
foreach (TSource element in source)
{
max = Math.Max(max, selector(element));
}
return max;
}
private static IEnumerable<TResult> SelectMany<TSource, TResult>(IEnumerable<IEnumerable<TSource>> source, Func<TSource, TResult> selector)
{
foreach (IEnumerable<TSource> enumerable in source)
{
foreach (TSource element in enumerable)
{
yield return selector(element);
}
}
}
private static TResult[] ToArray<TResult>(IEnumerable<TResult> source)
{
TResult[] array = null;
var length = 0;
var collection = source as ICollection<TResult>;
if (collection != null)
{
length = collection.Count;
if (length > 0)
{
array = new TResult[length];
collection.CopyTo(array, 0);
}
}
else
{
foreach (TResult element in source)
{
if (array == null)
array = new TResult[4];
else if (array.Length == length)
{
var elementArray = new TResult[checked (length * 2)];
Array.Copy(array, 0, elementArray, 0, length);
array = elementArray;
}
array[length] = element;
++length;
}
}
if (length == 0)
return new TResult[0];
if (array.Length == length)
return array;
var elementArray2 = new TResult[length];
Array.Copy(array, 0, elementArray2, 0, length);
return elementArray2;
}
private static IEnumerable<TResult> Distinct<TResult>(IEnumerable<TResult> source)
{
var distincts = new List<TResult>();
foreach (TResult element in source)
{
if (!distincts.Contains(element))
{
distincts.Add(element);
}
}
return distincts;
}