Подсчитайте количество символов в строке и удалите дубликаты

Я пытаюсь найти число каждого символа в строке. Я использую приведенный ниже код. Я перебираю каждого персонажа. Теперь, как мне изменить код, чтобы я не повторял один и тот же символ снова. Пример: «а» встречается три раза. Я просто хочу, чтобы мой код рассматривался только один раз.

        string input = "aajykumkar";
        int count = 0;
        for (int i = 0; i < input.Length; i++)
        {
          
            count = input.Count(x => x == input[i]);
            Console.WriteLine("Number of occurances of " + input[i] + " " + count);
        }
        Console.ReadLine();
    }

так что в основном вы хотите знать, присутствует ли символ в строке или нет?

Laurent S. 09.12.2020 17:08

в самом простом случае используйте список для записи всех персонажей, которых вы уже видели, и не запускайте подсчет снова, если текущий персонаж появляется в этом списке.

ADyson 09.12.2020 17:09

@ЛоранС. Я хочу знать, сколько раз каждый символ появлялся в строке.

user9063755 09.12.2020 17:12

@ADyson не уверен, как это сделать. Можете ли вы дать мне несколько советов по коду?

user9063755 09.12.2020 17:14

@Ajay Ajay, более аккуратный ответ уже был опубликован, но я озадачен «не уверен». Где ты застрял? Вы говорите, что не знаете, а) как создать список, б) как поместить в него что-то и/или в) как проверить, существует ли значение в списке, или г) что-то еще? Конечно, b и c не должны быть сложными, и их можно довольно легко исследовать.

ADyson 09.12.2020 17:22

@ADyson Получил ответ ниже! Большое спасибо.

user9063755 10.12.2020 16:59

Я знаю, что ты это сделал. Мой последний комментарий просто призвал вас обдумать процесс, который я описал, потому что я думаю, что это не так сложно, как вы, возможно, себе представляли.

ADyson 10.12.2020 17:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
620
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете сделать что-то вроде этого.

См. здесь для получения дополнительной информации о переборе массива:

^ Кроме того, это идет немного дальше, в том, как работает метод linq, из ответа Эхсана Саджада.

static void Main(string[] args)  
        {  
            string input = "aajykumkar";;  
            int n = input.Length;  
  
            Console.WriteLine("Unique array elements: ");  
  
            for (int i = 0; i < n; i++)  
            {  
                bool isDuplicate = false;  
                for(int j=0;j<i;j++)  
                {  
                    if (items[i] == items[j])  
                    {  
                        isDuplicate = true;  
                        break;  
                    }  
                }  
  
                if (!isDuplicate)  
                {  
                    Console.WriteLine(items[i]);  
                      
                }  
            }  
  
            Console.ReadLine();  
        }  

Это дает результат уникальных символов. Затем вы также можете подсчитать его или создать новую переменную вне цикла, где вы добавляете каждый раз +=1, если вы встречаете новый (уникальный) char в строке

Можно ли вернуть строку обратно, я ищу вывод "a3j1y1k2u1m1r1"

user9063755 26.02.2021 17:21
Ответ принят как подходящий

Вы можете сделать это очень легко, используя пространство имен System.Linq:

string input = "aajykumkar";
    
var groupedLetters = input.GroupBy(letter => letter);
    
foreach(var letter in groupedLetters)
{
    Console.WriteLine("Number of occurances of " + letter.Key + " " + letter .Count());
}

Выход:

Number of occurances of a 3
Number of occurances of j 1
Number of occurances of y 1
Number of occurances of k 2
Number of occurances of u 1
Number of occurances of m 1
Number of occurances of r 1

Не забудьте добавить using System.Linq; в свой код для этого.

Вы можете проверить работающую DEMO Fiddle по следующему адресу:

https://dotnetfiddle.net/9l8l2j

Можно ли вернуть строку обратно, я ищу вывод "a3j1y1k2u1m1r1"

user9063755 26.02.2021 17:18

То, что вы делаете, очень неэффективно, потому что вы ищете строку столько раз, сколько она длинна, т.е. сложность вашего алгоритма O(n^2).

Что вы хотите, так это проанализировать строку один раз и отслеживать, сколько раз вы встречали каждый элемент, а затем отображать это:

const string s = "oijewoijioajsdioajdiowrw";
foreach (var kvp in s.GroupBy(ch => ch).ToDictionary(w => w.Key, w => w.Count()))
    Console.WriteLine($"Number of occurances in {kvp.Key} is {kvp.Value}");

Можно ли вернуть строку обратно, я ищу вывод "a3j1y1k2u1m1r1"

user9063755 26.02.2021 17:21

Вы имеете в виду что-то вроде string.Concat(s.GroupBy(ch => ch).Select(kvp => $"{kvp.Key}{kvp.Count()}")) ?

Blindy 26.02.2021 19:07

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

500 ошибок при обслуживании статического контента с сайтов ASP .Net Framework 4.5 с использованием пользовательской учетной записи в пуле приложений
Добавить метаданные для всех вызовов службы gRPC
Является ли Task.Delay действительно асинхронным, как операция ввода-вывода, т. е. полагается ли он на аппаратное обеспечение и прерывания вместо потока?
Совместное использование файлов cookie аутентификации между приложениями .net 4x и .net 5 — доступ к пользовательскому принципу ClaimsPrinciple
Почему невозможно вызвать .ToArray непосредственно в GroupCollection, даже если это IEnumerable?
Удалить ключевые слова «ключ», «значение», когда List<KeyValuePair> сериализуется в Json?
Реализация функции удаления определенной записи в Muddatagrid
Как установить для свойства IsVisible элементов xaml значение true, если связанное логическое свойство имеет значение false?
В С# есть ли способ сослаться на вызывающий класс в конструкторе?
Изменение таблицы данных

Похожие вопросы