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