如何从添加到字典中的数组中删除重复值



我有一个用户输入:

public double[] ArrayOfDoublePrecisionFloatingPointValues()
{
Console.Write("Enter how many values (double in C#) you want to enter in the Array of Doubles: ");
int size = Convert.ToInt32(Console.ReadLine());  //Convert userinput to integer
double[] userInput = new double[size];
for (int i = 0; i < size; i++)
{
Console.Write("Type Double Value {0}: ", i + 1);
userInput[i] = Convert.ToDouble(Console.ReadLine());
}
return userInput;
}

当我输入这些值时,它会根据 for 循环重复的次数来创建重复项,以根据用户建立的大小输入数组值。 现在我看不到另一种获取用户输入以创建数组的方法。 因此,当我将数组放入字典中时,我重复了相同的值。 我不希望数组重复。 我只想要用户输入的原始数组。 以下是字典的代码:

UserInput u = new UserInput();
double[] userInputArray = u.ArrayOfDoublePrecisionFloatingPointValues();
for (int i = 0; i < userInputArray.Length; i++)
{
if(userInputArray == null)
{
Console.WriteLine("You have entered no values!  Add values");
}
else if(userInputArray != null)
{
Dictionary<int, double> indexAndIndexValue = new Dictionary<int, double>();
foreach (var (j, t)  in userInputArray.Enumerate())
{
indexAndIndexValue.Add(j, t);

}
foreach (var (key, value) in indexAndIndexValue)
{
Console.WriteLine(key + ":" + value);
Console.Write("------");
Console.WriteLine("Count: " + indexAndIndexValue.Count);
}

请注意,我已经尝试了 Distinct()。ToArray() 无济于事。 协助将不胜感激。

  1. ArrayOfDoublePrecisionFloatingPointValues()总是return数组,即使用户指定了size0。 稍后测试userInputArray == null以查看用户是否提供了任何输入时,该测试将始终失败。 当size0时,您需要将ArrayOfDoublePrecisionFloatingPointValues()更改为return null;...
    public double[] ArrayOfDoublePrecisionFloatingPointValues()
    {
    Console.Write("Enter how many values (double in C#) you want to enter in the Array of Doubles: ");
    int size = Convert.ToInt32(Console.ReadLine());  //Convert userinput to integer
    //TODO: Warn the user about negative input
    if (size < 1)
    {
    return null;
    }
    double[] userInput = new double[size];
    for (int i = 0; i < size; i++)
    {
    Console.Write("Type Double Value {0}: ", i + 1);
    userInput[i] = Convert.ToDouble(Console.ReadLine());
    }
    return userInput;
    }
    
    ...或测试userInputArray.Length == 0...
    if (userInputArray.Length == 0)
    {
    Console.WriteLine("You have entered no values!  Add values");
    }
    else
    {
    // ...
    
    我的代码将执行后者。
  2. 您的Dictionary<,>的作用域为for循环,因此每次迭代您都会创建一个新的空Dictionary<,>。 在循环创建Dictionary<,>,以便在循环后访问它。
  3. if分支(userInputArray != null/userInputArray.Length == 0)测试(并失败)"用户确实提供了输入"时,您无需在else分支中测试"用户未提供输入"。
  4. 你不需要检查用户是否在for循环的每次迭代中提供了任何输入;他们要么提供了,要么没有,所以你的for应该嵌套在if...else内,而不是相反。
  5. 你正在为userInputArray的每个元素添加userInputArray的每个元素(foreach (var (j, t) in userInputArray.Enumerate())for (int i = 0; i < userInputArray.Length; i++))。 相反,您应该只添加当前索引和值。

进行这些更改后,我最终会得到这个...

UserInput u = new UserInput();
double[] userInputArray = u.ArrayOfDoublePrecisionFloatingPointValues();
Dictionary<int, double> indexAndIndexValue = new Dictionary<int, double>();
if (userInputArray.Length == 0)
{
Console.WriteLine("You have entered no values!  Add values");
}
else
{
for (int i = 0; i < userInputArray.Length; i++)
{
indexAndIndexValue.Add(i, userInputArray[i]);
}
foreach (var (key, value) in indexAndIndexValue)
{
Console.WriteLine(key + ":" + value);
Console.Write("------");
Console.WriteLine("Count: " + indexAndIndexValue.Count);
}
}
//TODO: Use indexAndIndexValue, which may be empty

我将显示indexAndIndexValue内容的代码移到for循环之后,以便您可以看到最终内容,但是,如果您想查看它如何随每次迭代而变化,您可以将其保留在for循环内的位置。

如果你想确保ArrayOfDoublePrecisionFloatingPointValues()只会return至少有一个元素的double[],你可以这样写......

public double[] ArrayOfDoublePrecisionFloatingPointValues()
{
int size;
while (true)
{
Console.Write("Enter a positive number of values (double in C#) you want to enter in the Array of Doubles: ");
string input = Console.ReadLine();

if (!int.TryParse(input, out size) || size < 1) //Convert userinput to integer
{
Console.WriteLine($"ERROR: "{input}" is not a positive integer.");
}
else
{
break;
}
}
double[] userInput = new double[size];
for (int i = 0; i < size; i++)
{
Console.Write("Type Double Value {0}: ", i + 1);
//TODO: Use double.TryParse() to reject non-Double input
// https://learn.microsoft.com/dotnet/api/system.double.tryparse
userInput[i] = Convert.ToDouble(Console.ReadLine());
}
return userInput;
}

int.TryParse()在传递非整数输入时会returnfalse(例如"""ABC""123.456"),如果它returntrue,我们再进行测试以确保它也是一个阳性int

相关内容

  • 没有找到相关文章

最新更新