private IEnumerable <int> ToComplementCode() { var bin = ToInvertCode(ValueBin.ToList()); var res = new Bin(bin, IsNegative) + new Bin(1); return(res.ValueBin); }
public static ValueBin[] CountValues <T>(this IList <T> self, bool sort = true) { var counter = new Dictionary <T, int>(); foreach (var value in self) { if (counter.TryGetValue(value, out var count)) { counter[value] = count + 1; } else { counter[value] = 1; } } var values = counter.Keys.ToArray(); if (sort) { Array.Sort(values); } var bins = new ValueBin[values.Length]; for (var i = 0; i < values.Length; ++i) { var count = counter[values[i]]; var bin = new ValueBin() { Index = i, Value = values[i], Count = count, Ratio = (double)count / self.Count }; bins[i] = bin; } return(bins); }