TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1948 1.38K
День 1602. #ЗаметкиНаПолях
Полезные Расширения для IEnumerable. Окончание
Начало

4. Мода
Мода – число, которое чаще всего встречается в наборе:
public static IEnumerable<T> 
Mode<T>(this IEnumerable<T> source)
{
ArgumentNullException.ThrowIfNull(source);

var groups = source.GroupBy(x => x);
var maxCount = groups.Max(g => g.Count());
return groups
.Where(g => g.Count() == maxCount)
.Select(g => g.Key);
}

Использование:
var mode = new[] { 1, 1, 1, 1, 5, 6, 7, 8, 9 }
.Mode(); // 1

Если два или более чисел встречаются одинаковое количество раз, мы получим несколько значений в результате.

5. Среднеквадратичное отклонение
Это мера того, насколько разбросаны числа:
public static double 
StandardDeviation<T>(
this IEnumerable<T> source)
where T : IConvertible
{
ArgumentNullException.ThrowIfNull(source);

var values = source
.Select(x => x.ToDouble(
CultureInfo.InvariantCulture))
.ToList();
var count = values.Count;

if (count == 0)
throw new InvalidOperationException(
"Исходная коллекция пуста.");

var avg = values.Average();
var sum = values.Sum(d => Math.Pow(d - avg, 2));
return Math.Sqrt(sum / count);
}

Использование:
var stdDev = new[] { 1, 1, 1, 1, 5, 6, 7, 8, 9 }
.StandardDeviation(); // 3.1622776601683795

6. Перемешивание
Этот метод перемешивает элементы в последовательности, используя алгоритм перемешивания Фишера-Йейтса:
public static IEnumerable<T> 
Shuffle<T>(this IEnumerable<T> source)
{
ArgumentNullException.ThrowIfNull(source);

var arr = source.ToArray();
var random = Random.Shared;
for (var i = arr.Length - 1; i > 0; i--)
{
var idx = random.Next(i + 1);
(arr[i], arr[idx]) = (arr[idx], arr[i]);
}
return arr;
}

Использование:
var numbers = Enumerable.Range(0, 5);
var random = numbers.Shuffle();
// 4, 0, 1, 3, 2

Источник: https://steven-giesel.com/blogPost/1b8eaaef-01a3-4799-9a96-f0d37197d175
  • 👍 8
  • 👎 1
More from @netdeveloperdiary
  1. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  2. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  3. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  4. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  5. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  6. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →