检查数组中的两个项是否相同

时间:2014-10-11 14:28:12

标签: c# arrays string for-loop comparator

所以我正在为大学制作一个程序,我必须编写一个将名称存储到数组中的程序。 输入新名称后,它将添加到数组的末尾。用户可以继续添加名称,直到他们输入虚拟值'exit' 完成此操作后,程序将显示任何重复的名称。

E.g:

Enter name: Bill
Enter name: Mary
Enter name: Anisha
Enter name: Mary
Enter name: exit
Mary is a duplicate.

我还应该尝试显示每个名称重复的次数。

static void Main(string[] args)
{
    Console.WriteLine("This program allows you to write names to a list,");
    int i = 0;
    List<string> names = new List<string>();

    string name = " ";
    Console.WriteLine("Enter names then press enter to add them to the list of names! if you wish to exit simple type exit.");
    while (name.ToLower() != "exit")
    {
        Console.WriteLine("Enter Name: ");
        name = Console.ReadLine();
        names.Add(name);
        i++;        
    }

    string[] nameArray = names.ToArray();

    for(int z = 0;z <nameArray.Length;z++)
    {
        for (int y = z + 1; nameArray[y] == nameArray[z]; y++)
        {
            Console.WriteLine("The name: "+ nameArray[y]+" is a duplicate.");
        }
    }

    Console.ReadLine();      
}

这是我的代码,但在比较名称时崩溃了。它给了我一个重复的名字而没有其他名字。然后崩溃。我认为它与第二个for loop有关,但是有人可以运行这个并帮助我吗?

3 个答案:

答案 0 :(得分:2)

string[] nameArray = names.ToArray();

for(int z = 0;z < nameArray.Length;z++)
{
    for (int y = 0; y < nameArray.Length; y++)
    {
        if (nameArray[y] == nameArray[z])
        {
            Console.WriteLine("The name: "+ nameArray[y]+" is a duplicate.");
        }

    }

}

答案 1 :(得分:1)

您可以使用Linq

var group = nameArray.GroupBy(x => x);
foreach (var item in group.Where(x => x.Count() > 1))
{
    Console.WriteLine(string.Format(
        "The name: {0} is a duplicate ({1} times).", item.Key, item.Count()));
}

答案 2 :(得分:1)

你几乎是对的,你的内部for循环的条件应该是这样的:

for(int z = 0;z < nameArray.Length;z++)
{   
    int duplicates = 0;
    for (int y = z + 1; y < nameArray.Length - 1; y++)
    {
        if (nameArray[y] == nameArray[z])
        {
            duplicates++;
        }
    }
    Console.WriteLine("The name: "+ nameArray[y]+" is a duplicate " + duplicates + "times".);
}