Skip to content

Commit

Permalink
Merge pull request #11 from xin9le/join-overloads
Browse files Browse the repository at this point in the history
Add ZString.Join<T>(char, XxxCollection) overloads
  • Loading branch information
neuecc committed Apr 5, 2020
2 parents 80bc1e9 + 3504ad4 commit 0191cb5
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/ZString.Unity/Assets/Scripts/ZString/ZString.cs
Expand Up @@ -55,6 +55,29 @@ public static string Join<T>(char separator, params T[] values)
}
}

/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
public static string Join<T>(char separator, List<T> values)
{
var sb = new Utf16ValueStringBuilder(true);
try
{
var count = values.Count;
for (int i = 0; i < count; i++)
{
if (i != 0)
{
sb.Append(separator);
}
sb.Append(values[i]);
}
return sb.ToString();
}
finally
{
sb.Dispose();
}
}

/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
public static string Join<T>(char separator, ReadOnlySpan<T> values)
{
Expand Down Expand Up @@ -105,6 +128,26 @@ public static string Join<T>(char separator, IEnumerable<T> values)
}
}

public static string Join<T>(char separator, ICollection<T> values)
{
return Join(separator, values.AsEnumerable());
}

public static string Join<T>(char separator, IList<T> values)
{
return Join(separator, values.AsEnumerable());
}

public static string Join<T>(char separator, IReadOnlyList<T> values)
{
return Join(separator, values.AsEnumerable());
}

public static string Join<T>(char separator, IReadOnlyCollection<T> values)
{
return Join(separator, values.AsEnumerable());
}

/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
public static string Join<T>(string separator, params T[] values)
{
Expand Down
43 changes: 43 additions & 0 deletions src/ZString/ZString.cs
Expand Up @@ -55,6 +55,29 @@ public static string Join<T>(char separator, params T[] values)
}
}

/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
public static string Join<T>(char separator, List<T> values)
{
var sb = new Utf16ValueStringBuilder(true);
try
{
var count = values.Count;
for (int i = 0; i < count; i++)
{
if (i != 0)
{
sb.Append(separator);
}
sb.Append(values[i]);
}
return sb.ToString();
}
finally
{
sb.Dispose();
}
}

/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
public static string Join<T>(char separator, ReadOnlySpan<T> values)
{
Expand Down Expand Up @@ -105,6 +128,26 @@ public static string Join<T>(char separator, IEnumerable<T> values)
}
}

public static string Join<T>(char separator, ICollection<T> values)
{
return Join(separator, values.AsEnumerable());
}

public static string Join<T>(char separator, IList<T> values)
{
return Join(separator, values.AsEnumerable());
}

public static string Join<T>(char separator, IReadOnlyList<T> values)
{
return Join(separator, values.AsEnumerable());
}

public static string Join<T>(char separator, IReadOnlyCollection<T> values)
{
return Join(separator, values.AsEnumerable());
}

/// <summary>Concatenates the elements of an array, using the specified seperator between each element.</summary>
public static string Join<T>(string separator, params T[] values)
{
Expand Down
29 changes: 29 additions & 0 deletions tests/ZString.Tests/JoinTest.cs
Expand Up @@ -63,6 +63,35 @@ public void JoinOverloads2()
ZString.Join("_,_", (IReadOnlyCollection<int>)new[] { 1, 2, 3 }).Should().Be(string.Join("_,_", new[] { 1, 2, 3 }));
}

[Fact]
public void JoinOverloads3()
{
ZString.Join(',', new string[] { }.ToList()).Should().Be(string.Join(',', new string[0]));
ZString.Join(',', new[] { 1 }.ToList()).Should().Be(string.Join(',', new[] { 1 }));
ZString.Join(',', new[] { 1, 2 }.ToList()).Should().Be(string.Join(',', new[] { 1, 2 }));
ZString.Join(',', new[] { 1, 2, 3 }.ToList()).Should().Be(string.Join(',', new[] { 1, 2, 3 }));

ZString.Join(',', (IList<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
ZString.Join(',', (IList<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
ZString.Join(',', (IList<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
ZString.Join(',', (IList<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));

ZString.Join(',', (IReadOnlyList<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
ZString.Join(',', (IReadOnlyList<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
ZString.Join(',', (IReadOnlyList<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
ZString.Join(',', (IReadOnlyList<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));

ZString.Join(',', (ICollection<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
ZString.Join(',', (ICollection<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
ZString.Join(',', (ICollection<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
ZString.Join(',', (ICollection<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));

ZString.Join(',', (IReadOnlyCollection<int>)new int[] { }).Should().Be(string.Join(',', new string[0]));
ZString.Join(',', (IReadOnlyCollection<int>)new[] { 1 }).Should().Be(string.Join(',', new[] { 1 }));
ZString.Join(',', (IReadOnlyCollection<int>)new[] { 1, 2 }).Should().Be(string.Join(',', new[] { 1, 2 }));
ZString.Join(',', (IReadOnlyCollection<int>)new[] { 1, 2, 3 }).Should().Be(string.Join(',', new[] { 1, 2, 3 }));
}

[Fact]
public void CooncatNullTest()
{
Expand Down

0 comments on commit 0191cb5

Please sign in to comment.