Преобразует массив объектов в строку, разделенные запятыми, (CSV), которая содержит только указанные columns .
// TODO // TODO
↑ Вернуться к вершине
Принимает любое количество итерабируемых объектов или объектов с свойством length и возвращает самый длинный. Если несколько объектов имеют одинаковую длину, первый будет возвращен. Возврат -1 если не предоставлены аргументы.
// TODO // TODO
↑ Вернуться к вершине
Возвращает максимальные элементы n из предоставленного массива. Если n больше или равна длине предоставленного массива, верните исходный массив (отсортированный в порядке убывания).
// TODO // TODO
↑ Вернуться к вершине
Возвращает минимальные элементы n из предоставленного массива. Если n больше или равна длине предоставленного массива, верните исходный массив (отсортированный в порядке возрастания).
// TODO // TODO
↑ Вернуться к вершине
Возвращает true , если предоставленная функция предиката возвращает false для всех элементов в коллекции, false в противном случае.
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
↑ Вернуться к вершине
Возвращает n -й элемент массива.
// TODO // TODO
↑ Вернуться к вершине
Перемещает указанное количество элементов в конце массива.
// TODO // TODO
↑ Вернуться к вершине
Сортирует коллекцию массивов.
// TODO // TODO
↑ Вернуться к вершине
Группирует элементы на два массива, в зависимости от правдивости предоставленной функции для каждого элемента.
// TODO // TODO
↑ Вернуться к вершине
Генерирует все перестановки элементов массива (содержит дубликаты).
// TODO // TODO
↑ Вернуться к вершине
Получает все значения для данного ключа.
// TODO // TODO
↑ Вернуться к вершине
Мутирует исходный массив, чтобы отфильтровать указанные значения.
// TODO // TODO
↑ Вернуться к вершине
Мутирует исходный массив, чтобы отфильтровать значения в указанных индексах.
// TODO // TODO
↑ Вернуться к вершине
Мутирует исходный массив, чтобы отфильтровать указанные значения. Возвращает удаленные элементы.
// TODO // TODO
↑ Вернуться к вершине
Мутирует исходный массив, чтобы отфильтровать указанные значения, основанные на заданной функции итератора.
// TODO // TODO
↑ Вернуться к вершине
Отфильтруйте массив объектов на основе условия, а также фильтрации неопределенных ключей.
// TODO // TODO
↑ Вернуться к вершине
Применяет функцию против аккумулятора и каждого элемента в массиве (слева направо), возвращая массив последовательно сниженных значений.
// TODO // TODO
↑ Вернуться к вершине
Возвращает минимальное/максимальное значение массива, после применения предоставленной функции для установки сравнения правила.
// TODO // TODO
↑ Вернуться к вершине
Принимает предикат и массив, например, Array.prototype.filter() , но сохраняет x только если pred(x) === false .
// TODO // TODO
↑ Вернуться к вершине
Удаляет элементы из массива, для которого данная функция возвращает false .
// TODO // TODO
↑ Вернуться к вершине
Возвращает случайный элемент из массива.
// TODO // TODO
↑ Вернуться к вершине
Получает n случайных элементов в уникальных ключах от array до размера array .
// TODO // TODO
↑ Вернуться к вершине
Этот метод изменяет содержимое массива, удаляя существующие элементы и/или добавив новые элементы. Подобно javascript версий Array.prototype.splice()
// TODO // TODO
↑ Вернуться к вершине
Рандомизирует порядок значений массива, возвращая новый массив.
// TODO // TODO
↑ Вернуться к вершине
Возвращает множество элементов, которые появляются в обоих массивах.
// TODO // TODO
↑ Вернуться к вершине
Возвращает Direction.Ascending Приведено к тому, что перечисление сортируется в порядке возрастания, Direction.Descending Разрешение, если оно отсортировано в порядке убывания или Direction.NotSorted .
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 ;
}
}
}Использует enum jonasschubert.snippets.enumerable.derection.
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
↑ Вернуться к вершине
Возвращает самый низкий индекс, при котором значение должно быть вставлено в массив, чтобы поддерживать его сортировку.
// TODO // TODO
↑ Вернуться к вершине
Возвращает самый низкий индекс, при котором значение должно быть вставлено в массив, чтобы поддерживать его сортировку, основываясь на функции итератора.
// TODO // TODO
↑ Вернуться к вершине
Возвращает самый высокий индекс, при котором значение должно быть вставлено в массив, чтобы поддерживать его сортировку.
// TODO // TODO
↑ Вернуться к вершине
Возвращает самый высокий индекс, при котором значение должно быть вставлено в массив, чтобы поддерживать свой порядок сортировки на основе предоставленной функции итератора.
// TODO // TODO
↑ Вернуться к вершине
Выполняет стабильную сортировку массива, сохраняя начальные индексы элементов, когда их значения одинаковы. Не мутирует оригинальный массив, но вместо этого возвращает новый массив.
// TODO // TODO
↑ Вернуться к вершине
Возвращает симметричную разницу между двумя массивами, без фильтрации дублирующих значений.
// TODO // TODO
↑ Вернуться к вершине
Возвращает симметричную разницу между двумя массивами, после применения предоставленной функции к каждому элементу массива обоих.
// TODO // TODO
↑ Вернуться к вершине
Возвращает симметричную разницу между двумя массивами, используя предоставленную функцию в качестве компаратора.
// TODO // TODO
↑ Вернуться к вершине
Возвращает все элементы в массиве, за исключением первого.
// TODO // TODO
↑ Вернуться к вершине
Возвращает массив с n элементами, удаленными с самого начала.
// TODO // TODO
↑ Вернуться к вершине
Возвращает массив с n элементами, удаленными с конца.
// TODO // TODO
↑ Вернуться к вершине
Удаляет элементы с конца массива до тех пор, пока не вернет функцию, которую true вернется. Возвращает удаленные элементы.
// TODO // TODO
↑ Вернуться к вершине
Удаляет элементы в массиве до тех пор, пока не вернет функцию, которую true вернется. Возвращает удаленные элементы.
// TODO // TODO
↑ Вернуться к вершине
Преобразует 2D перечисляемой в строку, разделенные запятыми (CSV).
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,True n True,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.3 n 4.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: 0 n Byte: 1-Byte: 2"
↑ Вернуться к вершине
Снижает заданный массив, похожий на массив в хэш значений (хранилище данных с ключом).
// TODO // TODO
↑ Вернуться к вершине
Возвращает каждый элемент, который существует в любом из двух массивов один раз.
// TODO // TODO
↑ Вернуться к вершине
Возвращает каждый элемент, который существует в любом из двух массивов один раз, после применения предоставленной функции к каждому элементу массива обоих.
// TODO // TODO
↑ Вернуться к вершине
Возвращает каждый элемент, который существует в любом из двух массивов один раз, используя предоставленную функцию компаратора.
// TODO // TODO
↑ Вернуться к вершине
Возвращает все уникальные значения массива.
// TODO // TODO
↑ Вернуться к вершине
Возвращает все уникальные значения массива на основе предоставленной функции компаратора.
// TODO // TODO
↑ Вернуться к вершине
Возвращает все уникальные значения массива на основе предоставленной функции компаратора.
// TODO // TODO
↑ Вернуться к вершине
Возвращает уникальную симметричную разницу между двумя массивами, не содержащие дубликаты значений из любого массива.
// TODO // TODO
↑ Вернуться к вершине
Отфильтруйте элементы массива, которые имеют одно из указанных значений.
// TODO // TODO
↑ Вернуться к вершине
Создает новый массив из двух, поставляемых, создав каждую возможную пару из массивов.
// TODO // TODO
↑ Вернуться к вершине
Проверяет, если два числа приблизительно равны друг другу.
// TODO // TODO
↑ Вернуться к вершине
Возвращает среднее из двух или более чисел.
Метод исключает числа как параметры и возвращает среднее в результате.
Документация LINQ здесь.
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
↑ Вернуться к вершине
Возвращает среднее значение массива, после сопоставления каждого элемента до значения, используя предоставленную функцию.
// TODO // TODO
↑ Вернуться к вершине
Оценивает биномиальный коэффициент двух целых чисел n и k .
// TODO // TODO
↑ Вернуться к вершине
Преобразует угол от градусов в радиан.
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
↑ Вернуться к вершине
Преобразует число в массив цифр.
// TODO // TODO
↑ Вернуться к вершине
Возвращает расстояние между двумя точками.
// TODO // TODO
↑ Вернуться к вершине
Рассчитывает фактор числа.
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
↑ Вернуться к вершине
Генерирует список, содержащий последовательность Fibonacci, вплоть до NTH -члена.
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 ) ; # n ew List < int > ( ) { 0 , 1 }
Math . Fibonaci ( 7 ) ; # n ew List < int > ( ) { 0 , 1 , 1 , 2 , 3 , 5 , 8 }
↑ Вернуться к вершине
Вычисляет наибольший общий делитель между двумя или более чисел/массивов.
// TODO // TODO
↑ Вернуться к вершине
Инициализирует массив, содержащий числа в указанном диапазоне, где start и end инклюзивны, а отношение между двумя терминами - step . Возвращает ошибку, если step равен 1 .
// TODO // TODO
↑ Вернуться к вершине
Проверяет, находится ли заданный номер в пределах данного диапазона.
// TODO // TODO
↑ Вернуться к вершине
Проверяет, делится ли число на другой номер.
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
↑ Вернуться к вершине
Возвращает true если заданное число равно, false .
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
↑ Вернуться к вершине
Проверяет, является ли указанное целое число является основным номером.
// TODO // TODO
↑ Вернуться к вершине
Возвращает true если заданное число нечетное, в противном случае false .
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
↑ Вернуться к вершине
Возвращает наименее распространенные кратные из двух или более чисел.
// TODO // TODO
↑ Вернуться к вершине
Реализация алгоритма Luhn, используемого для проверки различных идентификационных номеров, таких как номера кредитных карт, номера IMEI, номера идентификаторов национального поставщика и т. Д.
// TODO // TODO
↑ Вернуться к вершине
Возвращает максимальное значение из предоставленного перечисленного.
// TODO // TODO
↑ Вернуться к вершине
Возвращает медиану множества чисел.
// TODO // TODO
↑ Вернуться к вершине
Возвращает минимальное значение из предоставленного перечисленного.
// TODO // TODO
↑ Вернуться к вершине
Генерирует простые числа до заданного числа, используя сито Эратостенеса.
// TODO // TODO
↑ Вернуться к вершине
Преобразует угол из радиан в градуса.
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
↑ Вернуться к вершине
Возвращает массив N случайных целых чисел в указанном диапазоне.
// TODO // TODO
↑ Вернуться к вершине
Возвращает случайное целое число в указанном диапазоне.
// TODO // TODO
↑ Вернуться к вершине
Возвращает случайное число в указанном диапазоне.
// TODO // TODO
↑ Вернуться к вершине
Раунтируют число по указанному количеству цифр.
// TODO // TODO
↑ Вернуться к вершине
Хуш входной строку в целое число.
// TODO // TODO
↑ Вернуться к вершине
Возвращает стандартное отклонение массива чисел.
// TODO // TODO
↑ Вернуться к вершине
Возвращает сумму двух или более чисел/массивов.
// TODO // TODO
↑ Вернуться к вершине
Возвращает сумму массива, после сопоставления каждого элемента по значению, используя предоставленную функцию.
// TODO // TODO
↑ Вернуться к вершине
Возвращает количество раз, выполняемое функцией в секунду. hz является единицей для hertz , единицы частоты, определяемой как один цикл в секунду.
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 ;
}
.. .
}
} # w ill 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 ) ;
↑ Вернуться к вершине
Итерации по обратном вызове n времена
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
↑ Вернуться к вершине
Возвращает длину струны в байтах.
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
↑ Вернуться к вершине
Возвращает количество гласных в предоставленной строке.
"" . ByteSize ( ) ; # 0
"Hello World" . ByteSize ( ) ; # 11
"Hello World" . ByteSizeUnicode ( ) ; # 22
"Hello World" . ByteSizeUtf32 ( ) ; # 44
"This is 30 seconds of C." . ByteSizeBigEndianUnicode ( ) ; # 48 // TODO
↑ Вернуться к вершине
Преобразует строку, разделенные запятыми (CSV), в 2D массив.
// TODO // TODO
↑ Вернуться к вершине
Преобразует строку, разделенные запятыми (CSV), в 2D-массив объектов. Первая строка строки используется в качестве строки заголовка.
// TODO // TODO
↑ Вернуться к вершине
Проверьте, заканчивается ли строка данной подстрокой, используя регуляцию.
Метод исключает строку для тестирования и подстроения для проверки.
Большинство других проверок уже интегрированы.
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
↑ Вернуться к вершине
Преобразует строку из Camelcase. Делает все слова строчными и объединяет их, используя предоставленный сепаратор (по умолчанию - одно пробел). Из параметра Issentence == 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"
↑ Вернуться к вершине
Проверяет, является ли строка анаграммой другой строки (нечувствительна к случаю).
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
↑ Вернуться к вершине
Проверяет, является ли строка более низким корпусом.
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
↑ Вернуться к вершине
Возвращает true если данная строка - палиндром, false в противном случае.
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
↑ Вернуться к вершине
Проверяет, является ли строка верхнего чехла.
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
↑ Вернуться к вершине
Заменяет все, кроме последней length символов с указанным символом mask . Опустите второй аргумент, length , чтобы сохранить по умолчанию 4 символа без маски. Если length отрицательная, разобранные символы будут в начале строки. Опустите третий аргумент, 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"
↑ Вернуться к вершине
Подушевляет строку с обеих сторон указанным символом, если она короче указанной длины. Используйте PadLeft() и PadRight() чтобы подумать о обе стороны данной струны. Опустите третий аргумент, char , чтобы использовать символ пробела в качестве символа по умолчанию.
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"
↑ Вернуться к вершине
Удаляет не печальные символы ASCII. Используйте регулярное выражение, чтобы удалить не печатные символы ASCII.
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"
↑ Вернуться к вершине
Переворачивает строку.
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!"
↑ Вернуться к вершине
Разбивает многослойную строку в массив строк.
namespace JonasSchubert . Snippets . String
{
public static partial class String
{
public static string [ ] SplitLines ( this string input ) => Regex . Split ( input , " r ? n " ) ;
}
} "This n is a n multiline n string. n " . SplitLines ( ) ; # n ew string [ ] { "This" , "is a" , "multiline" , "string." , "" }
↑ Вернуться к вершине
Проверьте, начинается ли строка с заданной подстроки с помощью регулярного положения.
Метод исключает строку для тестирования и подстроения для проверки.
Большинство других проверок уже интегрированы.
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
↑ Вернуться к вершине
Удаляет теги HTML/XML из строки. Используйте регулярное выражение, чтобы удалить теги HTML/XML из строки.
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"
↑ Вернуться к вершине
Преобразует строку в 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"
↑ Вернуться к вершине
Преобразует строку в корпус Kebab.
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"
↑ Вернуться к вершине
Преобразует строку в корпус змеи.
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"
↑ Вернуться к вершине
Преобразует строку в чехл.
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"
↑ Вернуться к вершине
Усекает строку до указанной длины.
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"
↑ Вернуться к вершине
Преобразует данную строку в список слов.
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 ( ) ; # n ew List < string > { "Hello" , "World" }
"Hello" . Words ( ) ; # n ew List < string > { "Hello" }
" " . Words ( ) ; # n ew List < string > ( )
↑ Вернуться к вершине
Проверяет, если предоставляемый тип имеет числовое тип.
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
↑ Вернуться к вершине
Расширяет 3-значный цветовой код до 6-значного цветового кода.
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"
↑ Вернуться к вершине
Преобразует цветовой код в строку rgb() или rgba() если предоставлено альфа -значение.
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)"
↑ Вернуться к вершине
Преобразует число в байтах в человеческую строку.
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"
↑ Вернуться к вершине
Генерирует случайный шестнадцатеричный цвет.
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 . )
↑ Вернуться к вершине
Преобразует значения компонентов RGB в цветовой код.
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"
↑ Вернуться к вершине
Измеряет время, принятое функцией для выполнения.
Запрос документирования здесь.
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.37m s , true
↑ Вернуться к вершине
Возвращает true если строка y / yes или false если строка 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
↑ Вернуться к вершине
Вы всегда можете внести свой вклад в этот проект. Пожалуйста, прочитайте руководство по взносу.
| Джонас Шуберт | Денис Биондик |
30 секунд C# распространяются по лицензии MIT. Смотрите лицензию для деталей.
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.