Похоже, вы в значительной степени модернизируете некоторые общие функции в System.Collections.Generic
и System.Linq
-
public bool EverybodyAreEqual(int[] array)
{
// If all items are the same,
// there should only be one distinct item in the collection
return array.Distinct().Length == 1;
}
public int NumDifferentArray(int[] array)
{
// Group the numbers in the array and
// count the number of groups with only one item
return array.GroupBy(number => number).Where(g => g.Count() == 1);
}
public int HowTimesExsist(int[] array, int num)
{
// Count the number of times a number appears in the array
return array.Count(n => n == num);
}
/// This function returns a minimum value as required,
/// for example if you requested 0 the smallest value is returned,
/// if 1 is returned one above it and so on,
/// if the index is greater than the length of the array the largest number is returned
public int MinBottom(int[] array, int num)
{
if (num < 0)
{
// Be specific about the type of exception you are throwing
throw new ArgumentOutOfRangeException(nameof(num));
}
// Sort a copy of your array
var sorted = Array.Copy(array);
Array.Sort(sorted);
// If there are any items over the specified minimum, return those
// otherwise, return the highest number in the array
// Using LastOrDefault for the maximum will return 0 if the initial array is empty
var itemsOverMinimum = sorted.Where(n => n >= num);
return itemsOverMinimum.Any() ? itemsOverMinimum.First() : sorted.LastOrDefault();
}
public int[] SmallToGrow(int[] array)
{
// Because you are returning an array, that implies that the original array should not change
// Copy the array and sort it
var copy = Array.Copy(array);
Array.Sort(copy);
return copy;
}
Я видел, что вы упомянули, что пытаетесь найти альтернативные способы достижения sh некоторые из этих вещей, и я хочу дать вам несколько советов по этому поводу.
Я думаю, это довольно круто, что вы хотите бросить вызов самому себе. Однако эта конкретная функция c является частью библиотек System
. Одна из лучших составляющих работы с C# - это то, как много такого рода вещей уже написано для вас, и эта функциональность, добавленная к System
, означает, что Microsoft считает, что эти части являются основными (каламбурными) строительными блоками для работает в. NET.
Если ваш проект не предназначен специально для написания лучшего алгоритма сортировки, вы не собираетесь писать его лучше, чем в этих библиотеках. Я занимаюсь этим какое-то время, и у меня тоже не будет возможности.
Но это не значит, что вам следует перестать учиться. Вместо этого я бы посоветовал вам посмотреть в исходном коде github методы, которые я использовал в приведенных выше фрагментах. Я думаю, что это, вероятно, будет намного полезнее, чем переработка этого материала с нуля.
https://github.com/dotnet/runtime/blob/master/src/libraries/System.Linq/src/System/Linq/Distinct.cs https://github.com/dotnet/runtime/blob/master/src/libraries/System.Linq/src/System/Linq/Grouping.cs https://github.com/dotnet/runtime/blob/master/src/libraries/System.Linq/src/System/Linq/Where.cs https://github.com/dotnet/runtime/blob/master/src/libraries/System.Linq/src/System/Linq/Count.cs