C#Hive: Projects & Progress | Программирование
1.95K subscribers
153 photos
17 videos
1 file
143 links
Сообщество единомышленников C#: решаем задачи, учимся, развиваемся и общаемся вместе. Советы по работе на фрилансе, готовые проекты, код ревью, рекомендации и исследования.

Вопросы/сотрудничество: @tel_phil9
Download Telegram
🖥 Сравнение строк из коллекции без учёта регистра

Когда-нибудь приходилось делать поиск по строковому ключу в Dictionary? Проблема со строковыми ключами — это непредсказуемость регистра (vip вместо VIP и т.п.).

Да, решить вопрос можно по-разному, например через string.ToLower. Однако это можно считать моветоном. Хорошим решением данного вопроса является передача параметра StringComparer.CurrentCultureIgnoreCase в конструктор Dictionary.

По аналогии со словарём, использовать данное решение можно и в случае с HashSet. Пример реализации:
HashSet<string> statuses = new HashSet<string>(StringComparer.CurrentCultureIgnoreCase)
{
"VIP",
"Premium"
};

Console.WriteLine(statuses.Contains("VIP")); // true
Console.WriteLine(statuses.Contains("vip")); // true


#Полезно #StringComparer #Dictionary #HashSet #Array
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5
🖥 Сравнение строк без учёта регистра

Ранее мы уже обсуждали корректное сравнение строк из коллекций. На этот раз мы рассмотрим сравнение одиночных строк, минуя их регистр.

Примитив решения сегодняшнего вопроса — это использование string.ToUpper или string.ToLower. Однако помимо очевидного моветона существует ряд дополнительных проблем такого сравнения.

Преимущества сравнения строк с помощью StringComparer:
Корректность: иногда использование ToUpper/ToLower может привести к неправильным результатам в некоторых языках (аля Турецкого);
Удобство чтения: использование string.Equals читателю кода явно даёт понять, что выполняется сравнение значений;
Производительность: метод эффективен, т.к. ему не нужно создавать новый экземпляр строки, как в случае с ToUpper/ToLower, от чего экономится память и увеличивается скорость работы.

В моменте я и сам могу забыть о таких решениях, но никогда не поздно приучить себя к полезным и правильным вещам, согласны?
Учимся писать корректно! 👍

#Полезно #StringComparer #Equals
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71🔥1
🖥 NaturalSort.Extension: естественная сортировка строк

Данная библиотека является расширением метода для StringComparison и IComparer<string>. Имеет поддержку естественной сортировки, когда мы, например, ожидаем порядок "abc1, abc2, abc10" вместо "abc1, abc10, abc2".

Полезно в ситуациях, когда стандартная сортировка строк не соответствует ожидаемому порядку, особенно, если в строках присутствуют числовые сегменты.

Пример использования:
using NaturalSort.Extension;

var arr = new string[] { "a1.txt", "a2.txt", "a10.txt", "a7.txt", "b.txt", "b55.txt", "a13.txt" };
Array.Sort(arr, StringComparer.OrdinalIgnoreCase.WithNaturalSort());

// arr { "a1.txt", "a2.txt", "a7.txt", "a10.txt", "a13.txt", "b.txt", "b55.txt" }


Полная документация библиотеки.

#Полезно #NaturalSort_Extension #StringComparer #Array
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9