2017-05-29 50 views
0

我想做一個程序,其中用戶給出10個名稱,我的程序必須檢查用戶是否給了相同的名稱,然後程序將其添加到列表並顯示他們。我的問題是我不明白如何檢查相同的名稱。comapring數組,如果用戶輸入然後在列表中添加

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(); 
+1

你要檢查,如果用戶輸入重複的名字嗎? –

+0

是的,我想檢查一下,然後想要將它添加到列表 –

+0

您的問題已經在這裏有一個答案。 https://stackoverflow.com/questions/4578260/how-to-find-all-duplicate-from-a-liststring –

回答

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(); 
+0

如果用戶給出3個相同的名稱,它顯示在列表中兩次... –

+0

我已經eddited我的答案消除那個問題 –

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()給出結果作爲數組

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(); 
相關問題