Я пытаюсь найти число каждого символа в строке. Я использую приведенный ниже код. Я перебираю каждого персонажа. Теперь, как мне изменить код, чтобы я не повторял один и тот же символ снова. Пример: «а» встречается три раза. Я просто хочу, чтобы мой код рассматривался только один раз.
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();
}
в самом простом случае используйте список для записи всех персонажей, которых вы уже видели, и не запускайте подсчет снова, если текущий персонаж появляется в этом списке.
@ЛоранС. Я хочу знать, сколько раз каждый символ появлялся в строке.
@ADyson не уверен, как это сделать. Можете ли вы дать мне несколько советов по коду?
@Ajay Ajay, более аккуратный ответ уже был опубликован, но я озадачен «не уверен». Где ты застрял? Вы говорите, что не знаете, а) как создать список, б) как поместить в него что-то и/или в) как проверить, существует ли значение в списке, или г) что-то еще? Конечно, b и c не должны быть сложными, и их можно довольно легко исследовать.
@ADyson Получил ответ ниже! Большое спасибо.
Я знаю, что ты это сделал. Мой последний комментарий просто призвал вас обдумать процесс, который я описал, потому что я думаю, что это не так сложно, как вы, возможно, себе представляли.
Вы можете сделать что-то вроде этого.
^ Кроме того, это идет немного дальше, в том, как работает метод 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"
Вы можете сделать это очень легко, используя пространство имен 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"
То, что вы делаете, очень неэффективно, потому что вы ищете строку столько раз, сколько она длинна, т.е. сложность вашего алгоритма 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"
Вы имеете в виду что-то вроде string.Concat(s.GroupBy(ch => ch).Select(kvp => $"{kvp.Key}{kvp.Count()}"))
?
так что в основном вы хотите знать, присутствует ли символ в строке или нет?