39 Dictionary<Person, List<int>> distancesBetweenStartsPerPerson =
new Dictionary<Person, List<int>>();
42 RacesVariant racesVariant = _raceService.PersistedRacesVariant;
44 Dictionary<Person, int> lastRaceIndex =
new Dictionary<Person, int>();
45 for (
int i = 0; i < racesVariant.
Races.Count; i++)
50 if (!personStart.IsActive) {
continue; }
52 Person person = personStart.PersonObj;
54 if (lastRaceIndex.TryGetValue(person, out
int lastIndex))
56 int distance = i - lastIndex;
57 if (!distancesBetweenStartsPerPerson.ContainsKey(person) || distancesBetweenStartsPerPerson[person] ==
null)
59 distancesBetweenStartsPerPerson[person] =
new List<int>();
61 distancesBetweenStartsPerPerson[person].Add(distance);
64 lastRaceIndex[person] = i;
67 return distancesBetweenStartsPerPerson.OrderBy(d => d.Value.Min()).ToDictionary(d => d.Key, d => d.Value);
78 Dictionary<Person, string> nameStringsDict = distancesBetweenStartsPerPerson.ToDictionary(kv => kv.Key, kv => $
"{kv.Key.FirstName}, {kv.Key.Name}");
79 int maxNameStrLen = nameStringsDict.Max(kv => kv.Value?.Length) ?? 30;
82 Dictionary<Person, string> valueStringsDict = distancesBetweenStartsPerPerson.ToDictionary(kv => kv.Key, kv =>
string.Join(
", ", kv.Value));
83 int maxValueStrLen = valueStringsDict.Max(kv => kv.Value?.Length) ?? 20;
86 string moduleString =
string.Join(Environment.NewLine,
87 distancesBetweenStartsPerPerson
88 .Select(kv => $
"{nameStringsDict[kv.Key]}: ".PadRight(maxNameStrLen + 2) +
89 $
"{valueStringsDict[kv.Key].PadRight(maxValueStrLen)} | " +
90 $
"{string.Join("|
", kv.Value.Select(v => new string('#', v)))}"));
91 foreach (
string placeholder
in Placeholders.Placeholders_AnalyticsDistancesBetweenStarts) { textPlaceholder.Add(placeholder, moduleString); }
92 return textPlaceholder;