这是我的程序,但我想如果用户输入一个名称,程序将首先看到该名称是否已保存在数组中。这是我试过的,我试图使用contains.but它失败了,它没有任何错误。 如果不是那么说那段代码意味着什么(我只是一个初学者),你能否给我一个简单的解决方案。
{
string naam;
Console.Write("geef je naam: ");
naam = Convert.ToString(Console.ReadLine());
string[] array = new string[] {naam};
while (naam != "")
{
Console.Write("geef je naam: ");
naam = Convert.ToString(Console.ReadLine());
//array[naam.Length] = Convert.ToString(Console.ReadLine());
}
if (array.Contains(naam))
{
Console.Write("naam is al toegevoegd");
}
while (naam == " ")
{
break;
}
Console.ReadLine();
}
这是我所做的练习的问题:你写了一个请求朋友名字的程序。
每次添加朋友检查以查看朋友的姓名。如果没有,那就停止重复朋友。
还要记录所有朋友的聚会费用。
派对的价格=每位朋友10欧元。
扩展名:如果数组中已存在好友的名字,则该名称不会再次添加。
答案 0 :(得分:1)
最好使用像Hashset<string>
这样的数据结构。 Hashsets通过迭代列表对O(1)进行O(1)查找。
您可能希望在将名称放入哈希集之前规范化名称(例如,如果您不希望它区分大小写并删除双倍间距等)。
var names = new HashSet<string>();
names.Add(NormaliseName("Tom"));
names.Add(NormaliseName("Peter"));
names.Add(NormaliseName("John"));
var normalisedTestName = NormaliseName("Tony");
if (names.Contains(normalisedTestName ))
{
// Already exists
}
else
{
// Doesn't exist, add to hashset
names.Add(normalisedTestName);
}
private static string NormaliseName(string name){
return name.ToLower().Trim();
}
答案 1 :(得分:0)
也许您可以使用字符串列表执行此操作,然后,您可以使用linQ在列表中进行搜索:
List<string> names = new List<string>();
if (names.Any(x => x.Contains(naam))
// stuff
else
names.Add(naam);
答案 2 :(得分:0)
var namen = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
bool gedaan = false;
while (!gedaan)
{
Console.Write("geef je naam: ");
var naam = Console.ReadLine().Trim();
gedaan = naam == "";
if (!gedaan)
{
if (!namen.Add(naam))
{
Console.WriteLine("naam is al toegevoegd");
}
}
};
Console.WriteLine($"totale party kosten: {namen.Count * 10} euro");
Console.ReadLine();