Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示数组中的每个值计数_C# - Fatal编程技术网

C# 显示数组中的每个值计数

C# 显示数组中的每个值计数,c#,C#,我有一个字符串[],其值如下 string[] s = { "saravanan", "Karthick", "Jackson", "saravanan" }; 我想看看下面的输出 萨拉瓦南发生2次 Karthick发生1次 杰克逊发生了1次 如果不使用列表或字典 这就是我迄今为止所尝试的: int i, j; String[] s = {"saravanan", "Karthick", "Jackson", "saravanan"} Console.WriteLine("Number of

我有一个
字符串[]
,其值如下

string[] s = { "saravanan", "Karthick", "Jackson", "saravanan" };
我想看看下面的输出

萨拉瓦南发生2次
Karthick发生1次
杰克逊发生了1次

如果不使用
列表
字典

这就是我迄今为止所尝试的:

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);
}
inti,j;
字符串[]s={“saravanan”、“Karthick”、“Jackson”、“saravanan”}
Console.WriteLine(“每个值发生的次数”);
对于(i=0;i
该代码生成以下输出:

每个值发生的次数
萨拉瓦尼人的人数=2
Karthickis计数=1
杰克逊尼计数=1
萨拉瓦尼人计数=2


通常,我们通过Linq解决此类问题(查询)

如果是嵌套循环(您当前的代码),我们不应该多次打印相同的名称。如果名字以前出现过,我们来介绍一下

   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);
  }
string[]s=new[]{
“萨拉瓦南”、“卡迪希”、“杰克逊”、“萨拉瓦南”};
对于(i=0;i
因为您不想在输出中出现两次“saravanan”
。然后可以使用空字符串作为sentinel值。当您找到增加计数的匹配项时,请将该元素清空,并进行适当的检查,以便在稍后遇到该元素时跳过该元素

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

您可以像这样使用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());

        }

回答得好。很多次,人们用LINQ来回答这样的问题,LINQ是一种非常不适合OPs的技术(对于我们大多数人来说,冗长的点符号的可读性是值得怀疑的),OPs显然是c#的新手,如果不是一般编程的话。看到一个从LINQ开始的答案让人耳目一新,但随后展示了一个更有用、更容易理解的经典实现。干得好,先生+太好了@MickyD我对linq很了解,这就是为什么我会给出这样的答案,我也知道这很有道理,但我的答案不是反对票。我一直比较喜欢短代码方法。不管怎样。@CoolJK你的问题有
3张反对票,我相信,还有一些方面使它成为一个糟糕的答案,而LINQ甚至没有参与其中。认为任何人都会对纯粹基于技术选择的答案投反对票,这或许是没有根据的。我怀疑投票被否决的原因要么是代码答案,要么就是它不起作用。我想我们大多数人都喜欢“短代码”,但混淆已经混淆的操作并不是解决问题的方法。@CoolJK谢谢你的代码。这对我很有用,我现在必须去了解林克。变量组=s.GroupBy(v=>v);foreach(组中的var组)Console.WriteLine(“{0}出现{1}次”,group.Key,group.Count());请检查这个答案是否正确。
saravanan occurs 2 times
KArthick occurs 1 times
Jackson occurs 1 times
 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());

        }