Отображать каждое значение Count из массива

У меня есть string[] со значениями вроде

string[] s = { "saravanan", "Karthick", "Jackson", "saravanan" };

Я хочу увидеть результат ниже

saravanan occures 2 times
Karthick occures 1 times
Jackson occures 1 times

Как мне это сделать без использованияList или Dictionary

Это то, что я пробовал до сих пор:

int i, j;
String[] s = {"saravanan", "Karthick", "Jackson", "saravanan"}

Console.WriteLine("Number of Times occured Each Values");

for (i = 0; i < s.Length; i++)
{
    int count = 0;
    for (j = 0; j < s.Length; j++)
    {
        if (s[i] == (s[j]))
        {
            count++;
        }
    }

    Console.WriteLine(s[i]+"is count = "+count);
}

Этот код производит такой вывод:

Number of Times occured Each Values
saravananis count=2
Karthickis count=1
Jacksonis count=1
saravananis count=2

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
0
65
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обычно мы решаем такие проблемы (запрос) через Linq

  string[] s = new[] { 
    "saravanan", "Karthick", "Jackson", "saravanan" };

  var result = string.Join(Environment.NewLine, s
    .GroupBy(item => item)
    .Select(chunk => $"{chunk.Key} occures {chunk.Count()} times"));

  Console.Write(result);

В случае вложенные циклы (ваш текущий код) мы должны нет распечатать то же имя несколько раз. Давайте представим bool appeared, если имя было указано раньше

   string[] s = new[] { 
     "saravanan", "Karthick", "Jackson", "saravanan" };

   for (i = 0; i < s.Length; i++) {
     int count = 0;
     bool appeared = false;

     for (j = 0; j < s.Length; j++) {
       if (s[i] == (s[j])) {
         // Names are same. Do we have the name before?
         if (j < i) {
           // If yes we have no need to loop any more
           appeared = true;

           break;
         }

         count++;
       }
     }

    // if name has been appeared already we shouldn't print it out 
    if (!appeared) 
      Console.WriteLine(s[i] + "is count = " + count);
  }

Хороший ответ. Очень часто на SO люди отвечают на подобные вопросы с помощью LINQ, техники, столь неприемлемой (а длинный точечная запись имеет сомнительную читабельность для лучших из нас) для OP, которые, очевидно, плохо знакомы с C#, если не программировать в целом. Так приятно увидеть ответ, начинающийся с LINQ, но затем показать более полезную классическую и более простую для понимания реализацию. Молодец, сэр! +1

MickyD 20.07.2018 15:20

Большой! @MickyD У меня есть знания о linq, поэтому я даю такой ответ, и я хорошо знаю его работу, но мой ответ не за отрицательное голосование. Я всегда предпочитаю метод короткого кода. как бы то ни было.

Kiran Joshi 20.07.2018 15:26

@CoolJK, у вашего вопроса был 3 downvotes, я считаю, и аспекты, которые сделали его плохим ответом, что LINQ даже не вошел в него. Предположение, что кто-то проголосует против ответа, основанного исключительно на выборе технологии, возможно, неоправданно. Я подозреваю, что причиной отрицательных голосов был либо ответ только на код, либо то, что это просто не сработало. Я думаю, что большинству из нас нравится "короткий номер", но запутать и без того запутанный OP - не выход.

MickyD 20.07.2018 15:31

@CoolJK Спасибо за ваш код. Это очень полезно для меня, и я должен узнать о Linq сейчас. var groups = s.GroupBy (v => v); foreach (группа переменных в группах) Console.WriteLine ("{0} встречается {1} раз", group.Key, group.Count ());

SARAVANAN PONNUSAMY 20.07.2018 15:41
Ответ принят как подходящий

Поскольку вы не хотите, чтобы "saravanan" появлялся дважды в вашем выводе. Затем вы можете использовать пустую строку в качестве контрольного значения. Когда вы найдете совпадения, которые увеличивают счет, очистите этот элемент и установите проверки, чтобы пропустить элемент, когда вы встретите его позже.

using System;

public class Program
{   
    public static void Main()
    {
        string[] s = { "saravanan","KArthick","Jackson","saravanan" };
        for (int i = 0; i < s.Length; i++) 
        {
            // Skip empty element
            if (string.IsNullOrEmpty(s[i]))
            {
                continue;
            }

            int count = 1;
            for (int j = i + 1; j < s.Length; j++) 
            {
                // Skip empty element
                if (string.IsNullOrEmpty(s[i]))
                {
                    continue;
                }

                if (s[i] == s[j])
                {
                    count++;

                    // Clear the element to indicate the element as already been counted
                    s[j] = string.Empty; 
                }
            }

            Console.WriteLine("{0} occurs {1} times", s[i], count);
        }
    }
}

Результат

saravanan occurs 2 times
KArthick occurs 1 times
Jackson occurs 1 times

Демо скрипки

вы можете использовать опцию группы linq следующим образом:

 String[] s = {"saravanan", "Karthick", "Jackson", "saravanan"};

        Console.WriteLine("Number of Times occured Each Values");

        var groupArray = s.GroupBy(x => x);
        foreach (var group in groupArray)
        {
            Console.WriteLine(group.Key + "is count = " + group.Count());

        }

пожалуйста, проверьте, что это правда танки.

Yakamuz 21.07.2018 10:42

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