using System.Collections; namespace GSS2.Core.Extensions; public static class EnumerableExtensions { public static IEnumerable<(int i, T value)> Enumerate(this IEnumerable values) => values.Select((value, i) => (i, value)); public static string ToString(this IDictionary values, string separator, int indent) => string.Join(separator, values.Select(v => $"{new string(' ', indent)} {v.Key}: {v.Value}")); public static string ToString(this IDictionary values, string separator, int indent) { var strs = new List(); var enumerator = values.GetEnumerator(); while (enumerator.MoveNext()) strs.Add($"{enumerator.Key}: {enumerator.Value}"); return string.Join(separator, strs.Select(s => $"{new string(' ', indent)}{s}")); } public static string ToString(this IEnumerable values, string separator, int indent) => (values as IEnumerable).ToString(separator, indent); public static string ToString(this IEnumerable values, string separator, int indent) { var strs = new List(); var enumerator = values.GetEnumerator(); while (enumerator.MoveNext()) strs.Add(enumerator.Current.ToString()); return string.Join(separator, strs.Select(s => $"{new string(' ', indent)}{s}")); } public static bool All(this IEnumerable values) => values.All(v => v); public static bool Any(this IEnumerable values) => values.Any(v => v); public static void AddRange(this IDictionary values, IEnumerable> collection) { foreach (var kv in collection) values.Add(kv); } public static double Variance(this IEnumerable values) { if (values.Count() == 1) return 0; double mean = values.Average(); double variance = 0.0; foreach (int value in values) variance += Math.Pow(value - mean, 2.0); return variance / values.Count(); } }