感谢您对C#字典Dictionary的用法说明感兴趣。以下是该主题的完整攻略:
什么是C#字典(Dictionary)?
C#字典(Dictionary)是一种键值对的集合,允许使用键值作为索引来访问和操作集合中的元素。字典是基于哈希表实现的,这使得它具有非常快的查找性能,可用于需要高效访问元素的情况。
基本语法
在C#中,可以使用以下语法创建一个字典:
Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();
其中,TKey
和TValue
分别表示键和值的类型。例如,可以创建一个键为字符串类型,值为整数类型的字典:
Dictionary<string, int> numberMap = new Dictionary<string, int>();
要向字典中添加新元素,可以使用以下语法:
dictionary.Add(key, value);
其中,key
是要添加的键,value
是要添加的值。例如:
numberMap.Add("one", 1);
numberMap.Add("two", 2);
numberMap.Add("three", 3);
要访问字典中的值,可以使用以下语法:
TValue value = dictionary[key];
其中,key
是要访问的键,TValue
是值的类型。例如:
int value = numberMap["one"]; // value == 1
Dictionary的性能
字典的性能与哈希表的大小有关。哈希表越大,其表现就越好,因为它可以分配更多的桶,减少哈希冲突的发生。
在使用Dictionary时,通常需要考虑三个重要因素:
- 容量:字典可以容纳的元素数量;
- 负载因子:占用哈希表的比例,一般在0.7左右;
- 扩容:当字典内元素个数达到容量的75%时,字典将自动扩容。
可使用以下方式创建指定容量和负载因子的字典:
Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>(capacity, loadFactor);
需要特别注意的是,初始化Dictionary的过程会分配一些内存,因此如果需要高性能,应当尽量避免频繁创建字典。
示例
下面给出两个示例。
示例1:从文本中统计单词数量
下面的代码演示了如何从文本中统计单词数量。它读取文本文件,对其中的每个单词进行哈希化,并将它们存储在Dictionary中。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string[] words = File.ReadAllText("text.txt")
.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' },
StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, int> wordCounts = new Dictionary<string, int>(words.Length);
foreach (string word in words)
{
string normalizedWord = word.ToLower();
if (wordCounts.ContainsKey(normalizedWord))
{
wordCounts[normalizedWord]++;
}
else
{
wordCounts.Add(normalizedWord, 1);
}
}
var sortedDict = from entry in wordCounts orderby entry.Value descending select entry;
foreach (var entry in sortedDict)
{
Console.WriteLine("{0}: {1}", entry.Key, entry.Value);
}
Console.ReadKey();
}
}
示例输出:
the: 10
and: 8
to: 7
a: 6
of: 6
in: 5
his: 5
with: 5
i: 4
that: 4
shall: 4
not: 4
is: 4
you: 3
but: 3
What: 3
it: 3
示例2:统计每个数字的个数
下面的代码演示了如何统计每个数字的个数。
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
int[] numbers = { 1, 1, 2, 2, 2, 3, 4, 4, 4, 4, 5, 5 };
Dictionary<int, int> counts = new Dictionary<int, int>();
foreach (int number in numbers)
{
if (counts.ContainsKey(number))
{
counts[number]++;
}
else
{
counts.Add(number, 1);
}
}
foreach (var pair in counts)
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
Console.ReadKey();
}
}
示例输出:
1: 2
2: 3
3: 1
4: 4
5: 2
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#字典Dictionary的用法说明(注重性能版) - Python技术站