我正在尝试创建一个用户提供10个名字的程序,程序必须检查用户是否给出了相同的名称,然后程序将其添加到列表中并显示它们。我的问题是我不明白如何检查相同的名字。
string[] namen = new string[10];
string[] names = new string[10];
List<string> result = new List<string>();
string naam;
for(int i = 0;i<10;i++)
{
Console.WriteLine("Geef {0} naam in: ", i+1);
naam = Console.ReadLine();
namen[i] = naam;
}
for(int i= 0;i<10;i++)
{
namen[i] = names[i];
}
Array.Sort(names);
for (int i = 0; i < 10;i++ )
{
if (namen[i]==namen[i])
{
result.Add(names[i]);
}
}
foreach(string show in result)
{
Console.WriteLine(show);
}
Console.ReadLine();
答案 0 :(得分:1)
您可以使用List<string>
并检查名称是否已全部包含在内:
List<string> names = new List<string>();
List<string> allreadyEntered = new List<string>();
string naam;
for(int i = 0;i<10;i++)
{
Console.WriteLine("Geef {0} naam in: ", i+1);
naam = Console.ReadLine();
if(names.Contains(naam) && !allreadyEntered.Contains(naam))
{
allreadyEntered.Add(naam);
}
names.Add(naam);
}
foreach(string naam in allreadyEntered)
{
Console.WriteLine(naam);
}
Console.ReadLine();
答案 1 :(得分:0)
您也可以使用System.Linq
string[] names = namen.GroupBy(n => n).Where(g => g.Count() > 1).Select(g => g.Key).ToArray();
GroupBy(n => n)
根据字符串数组对字符串数组进行分组。
Where(g => g.Count() > 1)
删除了包含单个实例的组。
Select(g => g.Key)
选择每个组的字符串值。
ToArray()
将结果作为数组
答案 2 :(得分:0)
我认为你可以这样做:
string[] namen = new string[10];
for(int i = 0;i<10;i++)
{
Console.WriteLine("Geef {0} naam in: ", i+1);
namen[i] = Console.ReadLine();;
}
namen
.GroupBy (n =>n)
.Where (w =>w.Count () > 1)
.ToList()
.ForEach(f=>Console.WriteLine(f.Key));
Console.ReadLine();