private string WriteFrequencies(DictionarySlim <long, int> freq, int fragmentLength) { var sb = new StringBuilder(); double percent = 100.0 / freq.Select(x => x.Value).Sum(); foreach (var kv in freq.OrderByDescending(i => i.Value)) { var keyChars = new char[fragmentLength]; var key = kv.Key; for (int i = keyChars.Length - 1; i >= 0; --i) { keyChars[i] = tochar[key & 0x3]; key >>= 2; } sb.Append(keyChars); sb.Append(" "); sb.AppendLine((kv.Value * percent).ToString("F3")); } return(sb.ToString()); }