Как выводить уникальные символы, кроме case c#, без linq

Выводить уникальные символы без учета регистра

IDictionary<char, int> charDict = new Dictionary<char, int>();

foreach (var ch in text)
{
    if (!charDict.TryGetValue(ch, out n)) {
        charDict.Add(new KeyValuePair<char, int>(ch, 1));
    } else
    {
        charDict[ch]++;
    }
}

Appellodppsafs => Apelodsf

И можно ли не использовать LINQ?

Возможный дубликат Как удалить повторяющиеся символы в строке?

Beytan Kurt 31.10.2018 12:53

Бейтан Курт, нет, моя программа должна выводить уникальные символы, кроме регистра! и без использования LINQ

ᗩᖱᖆᓲᗅᘘ ᑸᕩᖶᖇᓎᕓ 31.10.2018 13:34
1
2
82
2

Ответы 2

Используйте HashSet<char> для запоминания существующих символов (это то, что делает Distinct() внутри)

Предполагая, что ваш ввод и ожидаемый результат имеют тип string

string input = "Appellodppsafs";
HashSet<char> crs = new HashSet<char>();
string result = string.Concat(input.Where(x => crs.Add(char.ToLower(x)))); //Apelodsf

Вы можете попробовать это (если у вас нет длинных строк или проблем с производительностью):

string str = "Appellodppsafs";

string result = string.Concat(str.Select(s => $"{s}")
                               .Distinct(StringComparer.InvariantCultureIgnoreCase));

Console.WriteLine(result);

Выход:

Apelodsf

В случае Distinct() вы не можете гарантировать правильный порядок символов stackoverflow.com/questions/4734852/…

fubo 31.10.2018 13:36

Что ж, правильность зависит от того, как OP будет использовать результат.

SᴇM 31.10.2018 13:48

Другие вопросы по теме