Converts an array of objects to a comma-separated values (CSV) string that contains only the columns specified.
// TODO// TODO
↑ Back to top
Takes any number of iterable objects or objects with a length property and returns the longest one.
If multiple objects have the same length, the first one will be returned.
Returns -1 if no arguments are provided.
// TODO// TODO
↑ Back to top
Returns the n maximum elements from the provided array.
If n is greater than or equal to the provided array's length, then return the original array (sorted in descending order).
// TODO// TODO
↑ Back to top
Returns the n minimum elements from the provided array.
If n is greater than or equal to the provided array's length, then return the original array (sorted in ascending order).
// TODO// TODO
↑ Back to top
Returns true if the provided predicate function returns false for all elements in a collection, false otherwise.
namespace JonasSchubert.Snippets.Enumerable
{
public static partial class Enumerable
{
public static bool None<T>(this IEnumerable<T> enumerable, Func<T, bool> predicate)
{
try
{
return enumerable.First(predicate) == null;
}
catch (Exception)
{
return true;
}
}
}
}new List<int> { 3, 2, 0 }.None(x => x == 1); # true
new string[] { "Hello", "World" }.None(x => x.Length == 6) # true
new bool[] { true, false }.None(x => !x); # false
↑ Back to top
Returns the nth element of an array.
// TODO// TODO
↑ Back to top
Moves the specified amount of elements to the end of the array.
// TODO// TODO
↑ Back to top
Sorts a collection of arrays.
// TODO// TODO
↑ Back to top
Groups the elements into two arrays, depending on the provided function's truthiness for each element.
// TODO// TODO
↑ Back to top
Generates all permutations of an array's elements (contains duplicates).
// TODO// TODO
↑ Back to top
Retrieves all of the values for a given key.
// TODO// TODO
↑ Back to top
Mutates the original array to filter out the values specified.
// TODO// TODO
↑ Back to top
Mutates the original array to filter out the values at the specified indexes.
// TODO// TODO
↑ Back to top
Mutates the original array to filter out the values specified. Returns the removed elements.
// TODO// TODO
↑ Back to top
Mutates the original array to filter out the values specified, based on a given iterator function.
// TODO// TODO
↑ Back to top
Filter an array of objects based on a condition while also filtering out unspecified keys.
// TODO// TODO
↑ Back to top
Applies a function against an accumulator and each element in the array (from left to right), returning an array of successively reduced values.
// TODO// TODO
↑ Back to top
Returns the minimum/maximum value of an array, after applying the provided function to set comparing rule.
// TODO// TODO
↑ Back to top
Takes a predicate and array, like Array.prototype.filter(), but only keeps x if pred(x) === false.
// TODO// TODO
↑ Back to top
Removes elements from an array for which the given function returns false.
// TODO// TODO
↑ Back to top
Returns a random element from an array.
// TODO// TODO
↑ Back to top
Gets n random elements at unique keys from array up to the size of array.
// TODO// TODO
↑ Back to top
This method changes the contents of an array by removing existing elements and/or adding new elements.
Similar to the JavaScript version Array.prototype.splice()
// TODO// TODO
↑ Back to top
Randomizes the order of the values of an array, returning a new array.
// TODO// TODO
↑ Back to top
Returns an array of elements that appear in both arrays.
// TODO// TODO
↑ Back to top
Returns Direction.Ascending if the enumerable is sorted in ascending order, Direction.Descending if it is sorted in descending order or Direction.NotSorted if it is not sorted or has only one value.
namespace JonasSchubert.Snippets.Enumerable
{
public static partial class Enumerable
{
public static Direction SortedDirection<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null)
{
throw new ArgumentNullException(nameof(enumerable));
}
if (enumerable.Count() <= 1)
{
return Direction.NotSorted;
}
var direction = enumerable.GetDirection(0, 1);
if (enumerable.Count() > 2)
{
for (var index = 2; index < enumerable.Count(); index++)
{
var currentDirection = enumerable.GetDirection(index - 1, index);
direction = direction == Direction.NotSorted ? currentDirection : direction;
if (direction != currentDirection)
{
return Direction.NotSorted;
}
}
}
return direction;
}
private static Direction GetDirection<T>(this IEnumerable<T> enumerable, int indexStart, int indexEnd)
{
var compareResult = Comparer<T>.Default.Compare(enumerable.ElementAt(indexStart), enumerable.ElementAt(indexEnd));
return compareResult < 0 ? Direction.Ascending : compareResult > 0 ? Direction.Descending : Direction.NotSorted;
}
}
}Uses enum JonasSchubert.Snippets.Enumerable.Direction.
public enum Direction
{
NotSorted,
Ascending,
Descending
}new List<uint> { 1, 2, 3, 4, 5 }.SortedDirection(); # Direction.Ascending
new string[] { "C", "B", "A" }.SortedDirection(); # Direction.Descending
new List<TestStruct>() { new TestStruct { Byte = 0 }, new TestStruct { Byte = 1 }, new TestStruct { Byte = 0 } }.SortedDirection(); # Direction.NotSorted
↑ Back to top
Returns the lowest index at which value should be inserted into array in order to maintain its sort order.
// TODO// TODO
↑ Back to top
Returns the lowest index at which value should be inserted into array in order to maintain its sort order, based on a provided iterator function.
// TODO// TODO
↑ Back to top
Returns the highest index at which value should be inserted into array in order to maintain its sort order.
// TODO// TODO
↑ Back to top
Returns the highest index at which value should be inserted into array in order to maintain its sort order, based on a provided iterator function.
// TODO// TODO
↑ Back to top
Performs stable sorting of an array, preserving the initial indexes of items when their values are the same. Does not mutate the original array, but returns a new array instead.
// TODO// TODO
↑ Back to top
Returns the symmetric difference between two arrays, without filtering out duplicate values.
// TODO// TODO
↑ Back to top
Returns the symmetric difference between two arrays, after applying the provided function to each array element of both.
// TODO// TODO
↑ Back to top
Returns the symmetric difference between two arrays, using a provided function as a comparator.
// TODO// TODO
↑ Back to top
Returns all elements in an array except for the first one.
// TODO// TODO
↑ Back to top
Returns an array with n elements removed from the beginning.
// TODO// TODO
↑ Back to top
Returns an array with n elements removed from the end.
// TODO// TODO
↑ Back to top
Removes elements from the end of an array until the passed function returns true. Returns the removed elements.
// TODO// TODO
↑ Back to top
Removes elements in an array until the passed function returns true. Returns the removed elements.
// TODO// TODO
↑ Back to top
Converts a 2D enumerable to a comma-separated values (CSV) string.
namespace JonasSchubert.Snippets.Enumerable
{
public static partial class Enumerable
{
public static string ToCsv<T>(this IEnumerable<IEnumerable<T>> enumerable, string delimiter = ",")
{
if (enumerable == null)
{
throw new ArgumentNullException(nameof(enumerable));
}
return string.Join("n", enumerable.Select(subEnumerable => string.Join(delimiter, subEnumerable.Select(value => typeof(T).IsNumericType() ? value.ToString().Replace(",", ".") : value.ToString()))));
}
}
}new List<List<bool>> { new List<bool> { true, true }, new List<bool> { true, false } }.ToCsv(); # "True,TruenTrue,False"
new double[][] { new double[] { 1.1, 2.2, 3.3 }, new double[] { 4.4, 5.5, 6.6 } }.ToCsv() # "1.1,2.2,3.3n4.4,5.5,6.6"
new List<List<TestStruct>> { new List<TestStruct> { new TestStruct { Byte = 0 } }, new List<TestStruct> { new TestStruct { Byte = 1 }, new TestStruct { Byte = 2 } } }.ToCsv("-") # "Byte: 0nByte: 1-Byte: 2"
↑ Back to top
Reduces a given Array-like into a value hash (keyed data store).
// TODO// TODO
↑ Back to top
Returns every element that exists in any of the two arrays once.
// TODO// TODO
↑ Back to top
Returns every element that exists in any of the two arrays once, after applying the provided function to each array element of both.
// TODO// TODO
↑ Back to top
Returns every element that exists in any of the two arrays once, using a provided comparator function.
// TODO// TODO
↑ Back to top
Returns all unique values of an array.
// TODO// TODO
↑ Back to top
Returns all unique values of an array, based on a provided comparator function.
// TODO// TODO
↑ Back to top
Returns all unique values of an array, based on a provided comparator function.
// TODO// TODO
↑ Back to top
Returns the unique symmetric difference between two arrays, not containing duplicate values from either array.
// TODO// TODO
↑ Back to top
Filters out the elements of an array, that have one of the specified values.
// TODO// TODO
↑ Back to top
Creates a new array out of the two supplied by creating each possible pair from the arrays.
// TODO// TODO
↑ Back to top
Checks if two numbers are approximately equal to each other.
// TODO// TODO
↑ Back to top
Returns the average of two or more numbers.
The method excepts numbers as params and returns the average as a result.
Linq documentation here.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static double Average(this uint[] elements)
{
if (elements.Length == 0) return 0;
return elements.Aggregate(0.0, (current, element) => current + element) / elements.Length;
}
}
}{ 4, 5, 9, 1, 0 }.Average() # 3.8
↑ Back to top
Returns the average of an array, after mapping each element to a value using the provided function.
// TODO// TODO
↑ Back to top
Evaluates the binomial coefficient of two integers n and k.
// TODO// TODO
↑ Back to top
Converts an angle from degrees to radians.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static double DegToRad(this decimal degree) => (double)degree * System.Math.PI / 180.0;
public static double DegToRad(this double degree) => degree * System.Math.PI / 180.0;
public static double DegToRad(this float degree) => degree * System.Math.PI / 180.0;
public static double DegToRad(this int degree) => degree * System.Math.PI / 180.0;
public static double DegToRad(this uint degree) => degree * System.Math.PI / 180.0;
}
}270.0.DegToRad(); # ~ 4.71
-90u.DegToRad(); # ~ 1.57
720.DegToRad(); # ~ 12.57
↑ Back to top
Converts a number to an array of digits.
// TODO// TODO
↑ Back to top
Returns the distance between two points.
// TODO// TODO
↑ Back to top
Calculates the factorial of a number.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static uint Factorial(uint number)
{
var result = 1u;
for (var index = number; index > 0; index--)
{
result *= index;
}
return result;
}
}
}Math.Factorial(0); # 1
Math.Factorial(3); # 6
Math.Factorial(6); # 720
↑ Back to top
Generates an list, containing the Fibonacci sequence, up until the nth term.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static List<int> Fibonaci(int length)
{
var list = new List<int>();
for (var index = 0; index < length; index++)
{
list.Add(index <= 1 ? index : list[index - 1] + list[index - 2]);
}
return list;
}
}
}Math.Fibonaci(2); # new List<int>() { 0, 1 }
Math.Fibonaci(7); # new List<int>() { 0, 1, 1, 2, 3, 5, 8 }
↑ Back to top
Calculates the greatest common divisor between two or more numbers/arrays.
// TODO// TODO
↑ Back to top
Initializes an array containing the numbers in the specified range where start and end are inclusive and the ratio between two terms is step.
Returns an error if step equals 1.
// TODO// TODO
↑ Back to top
Checks if the given number falls within the given range.
// TODO// TODO
↑ Back to top
Checks if the a number is divisible by another number.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static bool IsDivisibleBy(this decimal value, decimal divider) => divider == 0 ? throw new DivideByZeroException() : value % divider == 0;
public static bool IsDivisibleBy(this double value, double divider) => divider == 0 ? throw new DivideByZeroException() : value % divider == 0;
public static bool IsDivisibleBy(this float value, float divider) => divider == 0 ? throw new DivideByZeroException() : value % divider == 0;
public static bool IsDivisibleBy(this int value, int divider) => divider == 0 ? throw new DivideByZeroException() : value % divider == 0;
public static bool IsDivisibleBy(this uint value, uint divider) => divider == 0 ? throw new DivideByZeroException() : value % divider == 0;
}
}1.IsDivisibleBy(2); # true
-2.0.IsDivisibleBy(2.0); # true
1.0f.IsDivisibleBy(2.0f); # false
2u.IsDivisibleBy(2u); # true
↑ Back to top
Returns true if the given number is even, false otherwise.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static bool IsEven(this decimal value) => value % 2 == 0;
public static bool IsEven(this double value) => value % 2 == 0;
public static bool IsEven(this float value) => value % 2 == 0;
public static bool IsEven(this int value) => value % 2 == 0;
public static bool IsEven(this uint value) => value % 2 == 0;
}
}0.IsEven(); # true
1u.IsEven(); # false
-2.0.IsEven(); # true
↑ Back to top
Checks if the provided integer is a prime number.
// TODO// TODO
↑ Back to top
Returns true if the given number is odd, false otherwise.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static bool IsOdd(this decimal value) => value % 2 == 1;
public static bool IsOdd(this double value) => value % 2 == 1;
public static bool IsOdd(this float value) => value % 2 == 1;
public static bool IsOdd(this int value) => value % 2 == 1;
public static bool IsOdd(this uint value) => value % 2 == 1;
}
}0.IsOdd(); # false
1u.IsOdd(); # true
-2.0.IsOdd(); # false
↑ Back to top
Returns the least common multiple of two or more numbers.
// TODO// TODO
↑ Back to top
Implementation of the Luhn Algorithm used to validate a variety of identification numbers, such as credit card numbers, IMEI numbers, National Provider Identifier numbers etc.
// TODO// TODO
↑ Back to top
Returns the maximum value from the provided enumerable.
// TODO// TODO
↑ Back to top
Returns the median of an array of numbers.
// TODO// TODO
↑ Back to top
Returns the minimum value from the provided enumerable.
// TODO// TODO
↑ Back to top
Generates primes up to a given number, using the Sieve of Eratosthenes.
// TODO// TODO
↑ Back to top
Converts an angle from radians to degrees.
namespace JonasSchubert.Snippets.Math
{
public static partial class Math
{
public static double RadToDeg(this decimal radians) => (double)radians * 180.0 / System.Math.PI;
public static double RadToDeg(this double radians) => radians * 180.0 / System.Math.PI;
public static double RadToDeg(this float radians) => radians * 180.0 / System.Math.PI;
public static double RadToDeg(this int radians) => radians * 180.0 / System.Math.PI;
public static double RadToDeg(this uint radians) => radians * 180.0 / System.Math.PI;
}
}(System.Math.PI / 2).RadToDeg() # 90
(System.Math.PI * -2).RadToDeg() # -360
↑ Back to top
Returns an array of n random integers in the specified range.
// TODO// TODO
↑ Back to top
Returns a random integer in the specified range.
// TODO// TODO
↑ Back to top
Returns a random number in the specified range.
// TODO// TODO
↑ Back to top
Rounds a number to a specified amount of digits.
// TODO// TODO
↑ Back to top
Hashes the input string into a whole number.
// TODO// TODO
↑ Back to top
Returns the standard deviation of an array of numbers.
// TODO// TODO
↑ Back to top
Returns the sum of two or more numbers/arrays.
// TODO// TODO
↑ Back to top
Returns the sum of an array, after mapping each element to a value using the provided function.
// TODO// TODO
↑ Back to top
Returns the number of times a function executed per second.
hz is the unit for hertz, the unit of frequency defined as one cycle per second.
namespace JonasSchubert.Snippets.Method
{
public static partial class Method
{
public static long Hz(
Action action,
uint iterations = 100000)
{
var watch = Stopwatch.StartNew();
for (var iteration = 0; iteration < iterations; iteration++)
{
action.Invoke();
}
watch.Stop();
return watch.ElapsedMilliseconds > 0
? (iterations * 1000) / watch.ElapsedMilliseconds
: long.MaxValue;
}
...
}
} # will return time depending on your PC power
int randomInt() => new Random().Next(0, 1000000);
Method.Hz(randomInt);
char[] charArrayFunc(string test) => test.ToCharArray().Select(x => (char)(x * 2)).Where(x => x > 0).ToArray();
Method.Hz(charArrayFunc);
↑ Back to top
Iterates over a callback n times
namespace JonasSchubert.Snippets.Method
{
public static partial class Method
{
public static IList<T1> Times<T1>(Func<T1> func, uint times)
{
var list = new List<T1>();
for (var index = 0; index < times; index++)
{
list.Add(func());
}
return list;
}
}
}Method.Times((() => true), 3) # list of size 3, all values true
Method.Times(((int start, int end) => new Random().Next(start, end)), 6, 0, 100) # list of size 6 with 6 random integers between 0 and 100
↑ Back to top
Returns the length of a string in bytes.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static int ByteSize(this string input) => System.Text.Encoding.Default.GetByteCount(input);
public static int ByteSizeAscii(this string input) => System.Text.Encoding.ASCII.GetByteCount(input);
public static int ByteSizeBigEndianUnicode(this string input) => System.Text.Encoding.BigEndianUnicode.GetByteCount(input);
public static int ByteSizeUnicode(this string input) => System.Text.Encoding.Unicode.GetByteCount(input);
public static int ByteSizeUtf7(this string input) => System.Text.Encoding.UTF7.GetByteCount(input);
public static int ByteSizeUtf8(this string input) => System.Text.Encoding.UTF8.GetByteCount(input);
public static int ByteSizeUtf32(this string input) => System.Text.Encoding.UTF32.GetByteCount(input);
}
}// TODO
↑ Back to top
Returns number of vowels in provided string.
"".ByteSize(); # 0
"Hello World".ByteSize(); # 11
"Hello World".ByteSizeUnicode(); # 22
"Hello World".ByteSizeUtf32(); # 44
"This is 30 seconds of C.".ByteSizeBigEndianUnicode(); # 48// TODO
↑ Back to top
Converts a comma-separated values (CSV) string to a 2D array.
// TODO// TODO
↑ Back to top
Converts a comma-separated values (CSV) string to a 2D array of objects. The first row of the string is used as the title row.
// TODO// TODO
↑ Back to top
Check if a string ends with a given substring using a regex.
The method excepts the string to test and a substring to test against.
Most other checks are already integrated.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static bool EndsWithRegex(this string input, string substring) => new Regex($"{substring}$").IsMatch(input);
}
}"Hello World".EndsWithRegex(@"[dolrwDOLRW]{5}$") # true
"Hello World, this is it".EndsWithRegex(@"[dolrwDOLRW]{5}$") # false
↑ Back to top
Converts a string from camelcase. Makes all words lowercase and combines them using a provided separator (default is one whitespace). Of the param isSentence == true, the first letter of the sentence will be uppercase and a dot will be added at the end (default is true).
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string FromCamelCase(this string input, string separator = " ", bool isSentence = true)
{
var value = string
.Join(separator, Regex.Matches(input, @"/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g"))
.ToLower();
return isSentence ? $"{char.ToUpperInvariant(value[0])}{value.Substring(1)}." : value;
}
}
}"someDatabaseFieldName".FromCamelCase(); # "Some database field name."
"someLabelThatNeedsToBeCamelized".FromCamelCase("-", false); # "some-label-that-needs-to-be-camelized"
"someJavascriptProperty".FromCamelCase("_", false); # "some_javascript_property"
↑ Back to top
Checks if a string is an anagram of another string (case-insensitive).
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static bool IsAnagramOf(this string input, string compare) => input.TransformToCompare() == compare.TransformToCompare();
private static string TransformToCompare(this string input) => string.Join(string.Empty, input.ToLower().OrderBy(x => x));
}
}"iceman".IsAnagramOf("cinema"); # true
"icemAn".IsAnagramOf("cinema"; # true
"icem an".IsAnagramOf("cinema"; # false
"ic.EMan".IsAnagramOf("cinema"; # false
"icman".IsAnagramOf("cinema"; # false
↑ Back to top
Checks if a string is lower case.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static bool IsLower(this string input) => input == input.ToLower();
}
}"abc".IsLower(); # true
"a3@$".IsLower(); # true
"Ab4".IsLower(); # false
↑ Back to top
Returns true if the given string is a palindrome, false otherwise.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static bool IsPalindrome(this string input) => input.ToLower() == string.Join(string.Empty, input.ToCharArray().Reverse()).ToLower();
}
}"tacocat".IsPalindrome(); # true
"tAcocat".IsPalindrome(); # true
"tacoca".IsPalindrome(); # false
↑ Back to top
Checks if a string is upper case.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static bool IsUpper(this string input) => input == input.ToUpper();
}
}"ABC".IsUpper(); # true
"A3@$".IsUpper(); # true
"aB4".IsUpper(); # false
↑ Back to top
Replaces all but the last length of characters with the specified mask character.
Omit the second argument, length, to keep a default of 4 characters unmasked.
If length is negative, the unmasked characters will be at the start of the string.
Omit the third argument, mask, to use a default character of '*' for the mask.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string Mask(this string input, int length = 4, char mask = '*') =>
length >= input.Length
? new string(mask, input.Length)
: length >= 0
? input.Remove(0, input.Length - length).Insert(0, new string(mask, input.Length - length))
: -length >= input.Length
? input
: input.Remove(-length, input.Length + length).Insert(-length, new string(mask, input.Length + length));
}
}"1234567890".Mask(); # "******7890"
"1234567890".Mask(3); # "*******890"
"1234567890".Mask(0); # "**********"
"1234567890".Mask(-4); # "1234******"
"1234567890".Mask(20, '-'); # "----------"
"1234567890".Mask(-20, '-'); # "1234567890"
↑ Back to top
Pads a string on both sides with the specified character, if it's shorter than the specified length.
Use PadLeft() and PadRight() to pad both sides of the given string.
Omit the third argument, char, to use the whitespace character as the default padding character.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string Pad(this string input, int length, char pad = ' ') => input.PadLeft((input.Length + length) / 2, pad).PadRight(length, pad);
}
}"Hello World.".Pad(20); # " Hello World. "
"Hello World.".Pad(5, '-'); # "Hello World."
"Dog".Pad(8, ' '); # " Dog "
"42".Pad(6, '0'); # "004200"
↑ Back to top
Removes non-printable ASCII characters. Use a regular expression to remove non-printable ASCII characters.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string RemoveNonAscii(this string input) => Regex.Replace(input, "[^x20-x7E]", "");
}
}"äÄçÇéÉêlorem ipsumöÖÐþúÚ".RemoveNonAscii(); # "lorem ipsum"
↑ Back to top
Reverses a string.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string Reverse(this string input) => string.Join(string.Empty, input.ToCharArray().Reverse());
}
}"My name is Jonas Schubert".Reverse(); # "trebuhcS sanoJ si eman yM"
"!This is, maybe not, but important...".Reverse(); # "...tnatropmi tub ,ton ebyam ,si sihT!"
↑ Back to top
Splits a multiline string into an array of lines.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string[] SplitLines(this string input) => Regex.Split(input, "r?n");
}
}"Thisnis anmultilinenstring.n".SplitLines(); # new string[] { "This", "is a", "multiline", "string.", "" }
↑ Back to top
Check if a string starts with a given substring using a regex.
The method excepts the string to test and a substring to test against.
Most other checks are already integrated.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static bool StartsWithRegex(this string input, string substring) => new Regex($"^{substring}").IsMatch(input);
}
}"Hello World".StartsWithRegex(@"[ehloEHLO]{5}$") # true
"Well, hello World".StartsWithRegex(@"[ehloEHLO]{5}$") # false
↑ Back to top
Removes HTML/XML tags from string. Use a regular expression to remove HTML/XML tags from a string.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string StripHtmlTags(this string input) => Regex.Replace(input, "<[^>]*>", "");
}
}"<p><em>lorem</em> <strong>ipsum</strong></p>".StripHtmlTags(); # "lorem ipsum"
"<div><br/>Hello <br />World</div>".StripHtmlTags(); # "Hello World"
↑ Back to top
Converts a string to camelcase.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string ToCamelCase(this string input)
{
var value = string.Join(string.Empty, Regex.Matches(input, @"/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g")
.Select(x => $"{x.Value.First().ToString().ToUpper()}{x.Value.Substring(1).ToLower()}"));
return char.ToLowerInvariant(value[0]) + value.Substring(1);
}
}
}"some_database_field_name".ToCamelCase(); # "someDatabaseFieldName"
"Some label that needs to be camelized".ToCamelCase(); # "someLabelThatNeedsToBeCamelized"
"some-javascript-property".ToCamelCase(); # "someJavascriptProperty"
"some-mixed_string with spaces_underscores-and-hyphens".ToCamelCase(); # "someMixedStringWithSpacesUnderscoresAndHyphens"
↑ Back to top
Converts a string to kebab case.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string ToKebabCase(this string input) =>
string.Join("-", Regex.Matches(input, @"/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g").Select(x => x.Value.ToLower()));
}
}"camelCase".ToKebabCase(); # "camel-case"
"some text".ToKebabCase(); # "some-text"
"some-mixed_string With spaces_underscores-and-hyphens".ToKebabCase(); # "some-mixed-string-with-spaces-underscores-and-hyphens"
"AllThe-small Things".ToKebabCase(); # "all-the-small-things"
"IAmListeningToFmWhileLoadingDifferentUrlOnMyBrowserAndAlsoEditingXmlAndHtml".ToKebabCase(); # "i-am-listening-to-fm-while-loading-different-url-on-my-browser-and-also-editing-xml-and-html"
↑ Back to top
Converts a string to snake case.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string ToSnakeCase(this string input) =>
string.Join("_", Regex.Matches(input, @"/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g").Select(x => x.Value.ToLower()));
}
}"camelCase".ToSnakeCase(); # "camel_case"
"some text".ToSnakeCase(); # "some_text"
"some-mixed_string With spaces_underscores-and-hyphens".ToSnakeCase(); # "some_mixed_string_with_spaces_underscores_and_hyphens"
"AllThe-small Things".ToSnakeCase(); # "all_the_small_things"
"IAmListeningToFmWhileLoadingDifferentUrlOnMyBrowserAndAlsoEditingXmlAndHtml".ToSnakeCase(); # "i_am_listening_to_fm_while_loading_different_url_on_my_browser_and_also_editing_xml_and_html"
↑ Back to top
Converts a string to title case.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string ToTitleCase(this string input) =>
string.Join(" ", Regex.Matches(input, @"/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g")
.Select(x => $"{x.Value.First().ToString().ToUpper()}{x.Value.Substring(1).ToLower()}"));
}
}"some_database_field_name".ToTitleCase(); # "Some Database Field Name"
"Some label that needs to be title-cased".ToTitleCase(); # "Some Label That Needs To Be Title Cased"
"some-package-name".ToTitleCase(); # "Some Package Name"
"some-mixed_string with spaces_underscores-and-hyphens".ToTitleCase(); # "Some Mixed String With Spaces Underscores And Hyphens"
↑ Back to top
Truncates a string up to a specified length.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static string Truncate(this string input, int maxLength) =>
input.Length > maxLength ? $"{input.Substring(0, maxLength > 3 ? maxLength - 3 : maxLength)}..." : input;
}
}"Hello World".Truncate(4); # "H..."
"Hello World".Truncate(12); # "Hello World"
↑ Back to top
Converts a given string into a list of words.
namespace JonasSchubert.Snippets.String
{
public static partial class String
{
public static List<string> Words(this string input, string pattern = @"w+[^s]*w+|w") =>
Regex.Matches(input, pattern).Select(x => x.Value).ToList();
}
}"Hello World".Words(); # new List<string> { "Hello", "World" }
"Hello".Words(); # new List<string> { "Hello" }
" ".Words(); # new List<string>()
↑ Back to top
Checks if the provided type is of a numeric type.
namespace JonasSchubert.Snippets.Type2
{
public static partial class Type2
{
public static bool IsNumericType(this Type type)
{
switch (Type.GetTypeCode(type))
{
case TypeCode.Byte:
case TypeCode.SByte:
case TypeCode.UInt16:
case TypeCode.UInt32:
case TypeCode.UInt64:
case TypeCode.Int16:
case TypeCode.Int32:
case TypeCode.Int64:
case TypeCode.Decimal:
case TypeCode.Double:
case TypeCode.Single:
return true;
default:
return false;
}
}
}
}typeof(sbyte).IsNumericType(); # true
typeof(short).IsNumericType(); # true
typeof(float).IsNumericType(); # true
typeof(string).IsNumericType(); # false
typeof(int[]).IsNumericType(); # false
↑ Back to top
Extends a 3-digit color code to a 6-digit color code.
namespace JonasSchubert.Snippets.Utility
{
public static partial class Utility
{
public static string ExtendHex(this string hex) =>
$"{string.Join("", (hex.StartsWith('#') ? hex : $"#{hex}").Select(x => x == '#' ? $"{x}" : $"{x}{x}"))}";
}
}"#03f".ExtendHex(); # "#0033ff"
"05a".ExtendHex(); # "#0055aa"
↑ Back to top
Converts a color code to a rgb() or rgba() string if alpha value is provided.
namespace JonasSchubert.Snippets.Utility
{
public static partial class Utility
{
public static string HexToRgb(string value)
{
value = value.Replace("#", "");
var hasAlpha = value.Length == 8;
value = value.Length == 3 ? string.Join("", value.Select(x => $"{x}{x}")) : value;
var valueAsInt = int.Parse(value, NumberStyles.HexNumber);
var red = valueAsInt >> (hasAlpha ? 24 : 16);
var green = (valueAsInt & (hasAlpha ? 0x00ff0000 : 0x00ff00)) >> (hasAlpha ? 16 : 8);
var blue = (valueAsInt & (hasAlpha ? 0x0000ff00 : 0x0000ff)) >> (hasAlpha ? 8 : 0);
var alpha = hasAlpha ? $"{ valueAsInt & 0x000000ff}" : null;
return $"rgb{(hasAlpha ? "a" : "")}({red}, {green}, {blue}{(hasAlpha ? $", {alpha}" : "")})";
}
}
}Utility.HexToRgb("#fff"); # "rgb(255, 255, 255)"
Utility.HexToRgb("#27ae60"); # "rgb(39, 174, 96)"
Utility.HexToRgb("#27ae60ff"); # "rgba(39, 174, 96, 255)"
↑ Back to top
Converts a number in bytes to a human-readable string.
namespace JonasSchubert.Snippets.Utility
{
public static partial class Utility
{
public static string PrettyBytes(ulong bytes)
{
var units = new string[] { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
var stringArray = units
.Select((unit, index) =>
Math.Floor(bytes / Math.Pow(1e3, index) % 1e3) > 0
? $"{Math.Floor(bytes / Math.Pow(1e3, index) % 1e3)} {unit}{(Math.Floor(bytes / Math.Pow(1e3, index) % 1e3) > 1 ? "s" : string.Empty)}"
: string.Empty)
.Where(x => !string.IsNullOrEmpty(x))
.Reverse()
.ToArray();
return stringArray.Length > 0
? string.Join(", ", stringArray)
: "0 B";
}
}
} Utility.PrettyBytes(0ul); # "0 B"
Utility.PrettyBytes(1001ul); # "1 KB, 1 B"
Utility.PrettyBytes(20000000000000000ul); # "20 PBs"
Utility.PrettyBytes(1001001001ul); # "1 GB, 1 MB, 1 KB, 1 B"
↑ Back to top
Generates a random hexadecimal color.
namespace JonasSchubert.Snippets.Utility
{
public static partial class Utility
{
public static string RandomHexColor() =>
$"#{(new Random().Next() * 0xFFFFFF * 1000000).ToString("X").PadLeft(6, '0').Substring(0, 6)}";
}
}Utility.RandomHexColor(); # "#01A5FF" (e.g.)
↑ Back to top
Converts the values of RGB components to a color code.
namespace JonasSchubert.Snippets.Utility
{
public static partial class Utility
{
public static string RgbToHex(int red, int green, int blue) =>
$"#{((red << 16) + (green << 8) + blue).ToString("X").PadLeft(6, '0')}";
}
}Utility.RgbToHex(0, 0, 0); # "#000000"
Utility.RgbToHex(1, 165, 255); # "#01A5FF"
Utility.RgbToHex(255, 255, 255); # "#FFFFFF"
↑ Back to top
Measures the time taken by a function to execute.
Stopwatch documentation here.
namespace JonasSchubert.Snippets.Utility
{
public static partial class Utility
{
public static (long, T1) TimeTaken<T1>(Func<T1> func)
{
var watch = Stopwatch.StartNew();
T1 result = func.Invoke();
watch.Stop();
return (watch.ElapsedMilliseconds, result);
}
}
}Utility.TimeTaken(() => true) # 13.37ms, true
↑ Back to top
Returns true if the string is y/yes or false if the string is n/no.
namespace JonasSchubert.Snippets.Utility
{
public static partial class Utility
{
public static bool YesNo(this string test, bool defaultVal = false) =>
new Regex(@"^(y|yes)$", RegexOptions.IgnoreCase).IsMatch(test)
? true
: new Regex(@"^(n|no)$", RegexOptions.IgnoreCase).IsMatch(test)
? false
: defaultVal;
}
}var empty = "".YesNo(); # false
var yes = "yes".YesNo(); # true
var y = "y".YesNo(); # true
var NO = "NO".YesNo(); # false
var nO = "nO".YesNo(); # false
↑ Back to top
You're always welcome to contribute to this project. Please read the contribution guide.
| Jonas Schubert | Denis Biondic |
30 Seconds of C# is distributed under the MIT license. See LICENSE for details.
MIT License
Copyright (c) 2018 - 2020 JonasSchubert
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.