正如您所见,我有GetEdinburgh()
调用的哈希表
但是这个程序需要运行可变的时间,每次需要调用不同的哈希表。如何使用GetEdinburgh()
等字符串替换GetTown()
?
static Hashtable GetEdinburgh()
{
Hashtable hashtable = new Hashtable();
hashtable.Add("Aberdeen", 129);
hashtable.Add("Ayr", 79);
hashtable.Add("Fort_William", 131);
hashtable.Add("Glasgow", 43);
hashtable.Add("Inverness", 154);
hashtable.Add("St_Andrews", 50);
hashtable.Add("Stirling", 36);
return hashtable;
}
static void Main(string[] args)
{
int total = 1000;
string Town = "";
Hashtable hashtable = GetEdinburgh(); //how can I change this to a string?
foreach (DictionaryEntry entry in hashtable)
{
if (Convert.ToInt32(entry.Value) < total)
{
total = Convert.ToInt32(entry.Value);
Town = entry.Key.ToString();
}
}
Console.WriteLine(Town + ", " + total + "km");
Console.ReadLine();
}
我可能没有具体说明我的问题。上面的当前代码工作正常,但我需要扩展它。我需要调用比上面提供的哈希表更多的哈希表,但我不能直接调用它。我需要有一个字符串值,每次实现一个循环来调用一个新的表。但是我无法将system.Collections.hashtable
转换为字符串。
答案 0 :(得分:1)
最好你可以写一个像这样的方法:
static Hashtable GetHashtable(string Table )
{
Hashtable hashtable = new Hashtable();
switch(table)
{
case "Edinburgh":
hashtable.Add("Aberdeen", 129);
hashtable.Add("Ayr", 79);
hashtable.Add("Fort_William", 131);
hashtable.Add("Glasgow", 43);
hashtable.Add("Inverness", 154);
hashtable.Add("St_Andrews", 50);
hashtable.Add("Stirling", 36);
break;
................
return hashtable;
}
您可以将字符串传递给方法并获取值。
如果答案真的回答了你的问题,请点击“答案”。
答案 1 :(得分:0)
<强> EDIT2 强>
更简单地说,如果您想使用string
键从Hashtable
获取匹配值,请执行此操作,
Hashtable distancesFromEdinburgh = GetEdinburgh();
string town = "Ayr";
int distanceFromEdinburghToAyr = distancesFromEdinburgh[town];
修改强>
答案是最简单的,也是最糟糕的方式,
static HashTable GetTown(string town)
{
Hashtable hashtable;
switch(town)
{
case "Edinburgh":
hashtable = new Hashtable();
hashtable.Add("Aberdeen", 129);
hashtable.Add("Ayr", 79);
hashtable.Add("Fort_William", 131);
hashtable.Add("Glasgow", 43);
hashtable.Add("Inverness", 154);
hashtable.Add("St_Andrews", 50);
hashtable.Add("Stirling", 36);
break;
// Other cases here
}
return hashtable;
}
好的,不要使用HashTable
作为开始。下面的代码使用了许多最新功能,并且与您发布的代码具有相同的功能。
又是什么问题?
private enum Towns
{
Aberdeen,
Ayr,
FortWilliam,
Glasgow,
...
}
private static IDictionary<Towns, int> GetEdinburgh()
{
return new Dictionary
{
{ Key = Aberdeen, Value = 129 },
{ Key = Ayr, Value = 79 },
{ Key = FortWilliam, Value = 131 },
{ Key = Glasgow, Value = 43 },
...
};
}
static void Main(string[] args)
{
var closest = this.GetEdinburgh()
.Where(p => p.Value < 1000)
.Min(p => p.Value);
Console.WriteLine("{0}, {1}km", closest.Key, closest.Value);
Console.ReadKey();
}
如果你想要一个普通的get town功能,你可以这样声明它。
private static IDictionary<Towns, int> GetTown(Towns town)
{
switch(town)
{
case Towns.Edinburgh:
return new Dictionary
{
{ Key = Aberdeen, Value = 129 },
{ Key = Ayr, Value = 79 },
{ Key = FortWilliam, Value = 131 },
{ Key = Glasgow, Value = 43 },
...
}
case Towns.Ayr
...
...
default:
throw new ArgumentException(
string.Format("{0} not implemented", town),
"town");
};
}
此功能的实现方式因存储或定义距离而异。当前的实现假定它们是硬编码的,这种方法很快,但维护起来有点脆弱。
如果您拥有城镇位置的坐标,您可以计算它们之间的距离,“每次通话时乌鸦飞行”。
如果你想要产生一个“真正的”最佳旅行距离,你需要一个地图和一个更复杂的路径寻找算法。
你有什么,你想做什么?