Skip to content

Commit d69ab3c

Browse files
committed
refactory: MemberTagDisplayService
1 parent 93c34ba commit d69ab3c

1 file changed

Lines changed: 26 additions & 27 deletions

File tree

SgfDevs/Dev/MemberTagDisplayService.cs

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public IReadOnlyList<string> GetDisplayMemberTags(IEnumerable<Tag> tags)
2424
internal IReadOnlyList<string> FormatDisplayMemberTags(IEnumerable<string> tagNames)
2525
{
2626
var displayTags = new List<string>();
27+
var seenTags = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
2728
var supportingYears = new SortedSet<int>();
2829
int? supportingInsertIndex = null;
2930

@@ -42,7 +43,7 @@ internal IReadOnlyList<string> FormatDisplayMemberTags(IEnumerable<string> tagNa
4243
continue;
4344
}
4445

45-
if (!displayTags.Contains(tagName, StringComparer.OrdinalIgnoreCase))
46+
if (seenTags.Add(tagName))
4647
{
4748
displayTags.Add(tagName);
4849
}
@@ -70,40 +71,38 @@ private static string GetDisplayName(Tag tag)
7071

7172
private static string FormatSupportingMemberYears(IEnumerable<int> years)
7273
{
73-
var ranges = new List<string>();
74-
int? rangeStart = null;
75-
int? previousYear = null;
74+
return string.Join(", ", GetConsecutiveYearRanges(years).Select(range => FormatRange(range.Start, range.End)));
75+
}
76+
77+
private static string FormatRange(int startYear, int endYear)
78+
{
79+
return startYear == endYear ? startYear.ToString() : $"{startYear}-{endYear}";
80+
}
7681

77-
foreach (var year in years)
82+
private static IEnumerable<(int Start, int End)> GetConsecutiveYearRanges(IEnumerable<int> years)
83+
{
84+
using var enumerator = years.GetEnumerator();
85+
if (!enumerator.MoveNext())
7886
{
79-
if (!rangeStart.HasValue)
80-
{
81-
rangeStart = year;
82-
previousYear = year;
83-
continue;
84-
}
87+
yield break;
88+
}
8589

86-
if (year == previousYear + 1)
90+
var rangeStart = enumerator.Current;
91+
var rangeEnd = rangeStart;
92+
93+
while (enumerator.MoveNext())
94+
{
95+
var year = enumerator.Current;
96+
if (year == rangeEnd + 1)
8797
{
88-
previousYear = year;
98+
rangeEnd = year;
8999
continue;
90100
}
91101

92-
ranges.Add(FormatRange(rangeStart.Value, previousYear!.Value));
93-
rangeStart = year;
94-
previousYear = year;
95-
}
96-
97-
if (rangeStart.HasValue && previousYear.HasValue)
98-
{
99-
ranges.Add(FormatRange(rangeStart.Value, previousYear.Value));
102+
yield return (rangeStart, rangeEnd);
103+
rangeStart = rangeEnd = year;
100104
}
101105

102-
return string.Join(", ", ranges);
103-
}
104-
105-
private static string FormatRange(int startYear, int endYear)
106-
{
107-
return startYear == endYear ? startYear.ToString() : $"{startYear}-{endYear}";
106+
yield return (rangeStart, rangeEnd);
108107
}
109108
}

0 commit comments

Comments
 (0)