C#使用符号表实现查找算法
符号表简介
符号表是一种字典结构,将键值对进行存储和管理。在计算机科学中,符号表用于存储程序中的变量名、方法名等。符号表能够快速的查找和插入数据。
C#中使用符号表
在C#中,可以使用System.Collections.Generic命名空间下的Dictionary
Dictionary<string, int> dict = new Dictionary<string, int>();
上述代码创建了一个空的符号表。下面将介绍如何向字典中插入数据以及如何查找数据。
插入数据
使用Add方法可以向符号表中插入数据。该方法接收两个参数,第一个是键,第二个是值。比如下面的代码向dict中插入了键为"apple"、值为3的数据:
dict.Add("apple", 3);
如果添加的键已经存在于字典中,Add方法将会抛出ArgumentException异常。
除了Add方法,还可以使用索引器添加数据。比如下面的代码实现了与上面相同的操作:
dict["apple"] = 3;
如果键在字典中不存在,那么将会自动添加该键值对到字典中。
查找数据
使用索引器可以查找符号表中的数据。比如下面的代码查询键为"apple"的值:
int value = dict["apple"];
如果该键不存在于字典中,将会抛出KeyNotFoundException异常。为了避免异常产生,也可以使用TryGetValue方法来查找数据。该方法接收两个参数,第一个是键,第二个是变量的引用。如果键存在于字典中,该方法返回true,同时将变量的引用指向该键对应的值。比如下面的代码查找键为"apple"的值:
int value;
bool found = dict.TryGetValue("apple", out value);
if (found)
{
Console.WriteLine("The value of \"apple\" is {0}.", value);
}
else
{
Console.WriteLine("\"apple\" not found in the dictionary.");
}
示例说明
示例一
下面的示例演示了如何使用符号表实现经典的计数器:
using System;
using System.Collections.Generic;
namespace CounterApp
{
class Program
{
static void Main()
{
Dictionary<string, int> counter = new Dictionary<string, int>();
Console.Write("Enter some words separated by spaces: ");
string input = Console.ReadLine();
string[] words = input.Split(' ');
foreach (string word in words)
{
if (counter.ContainsKey(word))
{
counter[word] += 1;
}
else
{
counter.Add(word, 1);
}
}
Console.WriteLine("Word count:");
foreach (KeyValuePair<string, int> pair in counter)
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
}
}
}
该程序首先接收用户输入一些单词,然后统计每个单词出现的次数,最终输出统计结果。运行该程序,可以得到如下的输出:
Enter some words separated by spaces: hello world this is a hello world program
Word count:
hello: 2
world: 2
this: 1
is: 1
a: 1
program: 1
示例二
下面的示例演示了如何使用字符串作为键来存储和查找对象信息:
using System;
using System.Collections.Generic;
namespace ObjectTableApp
{
class Program
{
static void Main()
{
Dictionary<string, object> table = new Dictionary<string, object>();
table.Add("person1", new { Name = "Alice", Age = 25, Gender = "female" });
table.Add("person2", new { Name = "Bob", Age = 30, Gender = "male" });
table.Add("person3", new { Name = "Charlie", Age = 35, Gender = "male" });
Console.WriteLine("Information for person1:");
PrintInfo(table, "person1");
Console.WriteLine("Information for person2:");
PrintInfo(table, "person2");
Console.WriteLine("Information for person3:");
PrintInfo(table, "person3");
}
static void PrintInfo(Dictionary<string, object> table, string key)
{
object data;
if (table.TryGetValue(key, out data))
{
dynamic person = data;
Console.WriteLine("Name: {0}", person.Name);
Console.WriteLine("Age: {0}", person.Age);
Console.WriteLine("Gender: {0}", person.Gender);
}
else
{
Console.WriteLine("Key not found: {0}", key);
}
}
}
}
该程序使用匿名类型定义了三个对象,并使用字符串作为键存储这些对象。然后程序调用PrintInfo方法分别打印了每个对象的信息。运行该程序,可以得到如下的输出:
Information for person1:
Name: Alice
Age: 25
Gender: female
Information for person2:
Name: Bob
Age: 30
Gender: male
Information for person3:
Name: Charlie
Age: 35
Gender: male
上述示例只是符号表在实际应用中的一小部分,实际上符号表还有非常广泛的应用场景,如编译器、文件系统、数据库等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用符号表实现查找算法 - Python技术站