【发布时间】:2020-06-04 19:33:37
【问题描述】:
EDITED:(编辑二分查找法) 我正在使用升c。我有一个排序列表,其中包含一些值,例如名称及其数量。
我的代码:
using System;
using System.Collections.Generic;
using static System.Console;
namespace InventoryManagementSystem
{
public class Tool
{
public Tool(string name, int quantity)
{
this.Name = name;
this.Quantity = quantity;
}
public string Name { get; }
public int Quantity { get; }
public int CompareTo(SortedList<string, Tool> other, String name)
{
return; //not sure how to write this properly
}
}
}
//工具类
public class ToolItems
{
SortedList<string, Tool> gardeningTools = new SortedList<string, Tool>();
public void gardeningToolData()
{
Tool gardeningTool1 = new Tool("Garden gloves", 50);
gardeningTools.Add(gardeningTool1.Name, gardeningTool1);
WriteLine("Please enter a name of the tool");
String user = ReadLine();
int number = binarySearch(user);
}
public int binarySearch(String user)
{
while (low <= high)
{
mid = (high + low) / 2;
if (gardeningTools.Values[high].Name.CompareTo(user) == 0)
{
WriteLine("mid is: " + mid);
return mid;
}
else if (gardeningTools.Values[high].Name.CompareTo(user) > 0)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
已编辑:我的代码现在可以正常工作,但如果值介于列表的第一个和最后一个索引之间,它会返回索引 0。如何根据用户搜索的名称从排序列表中获取确切的索引?
简而言之,我要做的就是当用户输入一些字符串值并且如果它在排序列表中匹配(我们使用二进制搜索算法搜索)我们从排序列表中获取该值的索引并更新该值的数量具体值(如果用户选择'A'并且它位于索引0(“A”,5)那么我们询问用户你想借多少A并且用户说2,所以数量现在更新为3。
【问题讨论】:
-
if (gardeningTools.Values[high].Name.CompareTo(user) == 0)string 类CompareTo方法? -
我可以试试,但请告诉我如何编写 CompareTo() 方法?所以它实际上可以比较这两个值
-
能否告诉我如何使用字符串类 CompareTo?
-
不。因为编写一个将
SortedList<string, Tool>与string进行比较的CompareTo方法没有任何意义(无论如何对我而言)。 -
我在第一条评论中给了你一个例子。基本上是
Name.CompareTo(user)
标签: c# list binary-search compareto sortedlist