>source

문자열에서 각 문자의 숫자를 찾으려고합니다. 아래 코드를 사용하고 있습니다. 나는 각 캐릭터를 반복하고 있습니다. 이제 동일한 문자를 다시 반복하지 않도록 코드를 수정하는 방법은 무엇입니까? 예 : 'a'가 세 번 나옵니다. 내 코드가 한 번만 고려되기를 원합니다.

       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();
    }

  • 답변 # 1

    당신은 사용하여 매우 쉽게 할 수 있습니다 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

  • 답변 # 2

    당신이하는 일은 매우 비효율적입니다. 왜냐하면 당신은 문자열이 긴만큼 문자열을 검색하기 때문입니다. 즉 알고리즘의 복잡성은 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}");
    
    

  • 답변 # 3

    이런 식으로 할 수 있습니다.

    배열 루핑에 대한 자세한 내용은 여기를 참조하십시오.

    ^ 또한 Ehsan Sajjad의 답변에서 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();  
            } 
    
    

    이것은 고유 한 문자의 결과를 제공합니다. 그런 다음 카운트를 추가하거나 루프 외부에 새로운 var를 만들 수 있습니다. 문자열에서 새로운 (고유 한) 문자를 만나면 + = 1을 매번 추가합니다.

관련 자료

  • 이전 c# - HttpContent는 try와 catch 사이에 삭제됩니다
  • 다음 database - laravel의 API 본문에서 속성을 얻는 방법은 무엇입니까?