C# 字典

来源:这里教程网 时间:2026-02-17 08:44:21 作者:

C# 字典,也称为关联数组,是唯一键的集合和值的集合,其中每个键都与一个值关联。 检索和添加值非常快。 字典占用更多内存,因为每个值都有一个键。

C# 字典初始化器

可以使用文字符号初始化 C# 字典。 这些元素添加在{}括号内的分配的右侧。

Program.cs

using System;using System.Collections.Generic;namespace Initializers{    class Program    {        static void Main(string[] args)        {            var domains = new Dictionary<string, string>             {                 {"sk", "Slovakia"},                 {"ru", "Russia"},                {"de", "Germany"},                {"no", "Norway"}            };            Console.WriteLine(domains["sk"]);            var days = new Dictionary<string, string>             {                 ["mo"] =  "Monday",                 ["tu"] =  "Tuesday",                 ["we"] =  "Wednesday",                 ["th"] =  "Thursday",                 ["fr"] =  "Friday",                 ["sa"] =  "Saturday",                 ["su"] =  "Sunday"            };            Console.WriteLine(days["fr"]);        }    }}

在示例中,我们使用文字符号创建两个字典。

var domains = new Dictionary<string, string> {     {"sk", "Slovakia"},     {"ru", "Russia"},    {"de", "Germany"},    {"no", "Norway"}};

创建一个新的字典。 在尖括号&lt;&gt;之间,我们指定键和值的数据类型。 新的键/值元素对写在嵌套的{}括号内; 每对之间用逗号分隔。 例如,"sk"键引用"Slovakia"值。

Console.WriteLine(domains["sk"]);

要获得一个值,我们指定字典名称,后跟方括号[]。 在方括号之间,我们指定密钥名称。

var days = new Dictionary<string, string> {     ["mo"] =  "Monday",     ["tu"] =  "Tuesday",     ["we"] =  "Wednesday",     ["th"] =  "Thursday",     ["fr"] =  "Friday",     ["sa"] =  "Saturday",     ["su"] =  "Sunday"};

这是替代的 C# 字典初始化程序。 使用字典访问符号将值分配给键。

$ dotnet runSlovakiaFriday

这是输出。

C# 计数元素

通过Count属性,我们可以获得字典中的键数。

Program.cs

using System;using System.Collections.Generic;namespace Counting{    class Program    {        static void Main(string[] args)        {            var domains = new Dictionary<string, string>             {                 {"sk", "Slovakia"},                 {"ru", "Russia"},                {"de", "Germany"},                {"no", "Norway"}            };            domains.Add("pl", "Poland");            Console.WriteLine($"There are {domains.Count} items in the dictionary");        }    }}

该示例计算字典中的项目数。

Console.WriteLine($"There are {domains.Count} items in the dictionary");

在这里,我们打印字典中的项目数。

$ dotnet runThere are 5 items in the dictionary

C# 添加和删除元素

创建字典后,可以在字典中添加或删除新元素。

Program.cs

using System;using System.Collections.Generic;namespace AddRemove{    class Program    {        static void Main(string[] args)        {            var users = new Dictionary<string, int>()            {                { "John Doe", 41 },                { "Jane Doe", 38 },                { "Lucy Brown", 29 },            };            users["Paul Brown"] = 33;            users.Add("Thomas Pattison", 34);            Console.WriteLine(string.Join(", ", users));            users.Remove("Jane Doe");            Console.WriteLine(string.Join(", ", users));            users.Clear();            if (users.Count == 0)             {                Console.WriteLine("The users dictionary is empty");            }        }    }}    

该示例创建一个新词典并使用几种内置方法对其进行修改。

var users = new Dictionary<string, int>(){    { "John Doe", 41 },    { "Jane Doe", 38 },    { "Lucy Brown", 29 },};

创建一个新的字典。 用户名是键,用户年龄是值。

users["Paul Brown"] = 33;users.Add("Thomas Pattison", 34);

我们使用字典访问符号和Add()方法将两个新对添加到字典中。

Console.WriteLine(string.Join(", ", users));

我们使用字符串Join()方法一次显示所有元素。

users.Remove("Jane Doe");

使用Remove()方法删除一对。 该参数是字典键。

users.Clear();

用Clear()方法清除字典。

$ dotnet run[John Doe, 41], [Jane Doe, 38], [Lucy Brown, 29], [Paul Brown, 33], [Thomas Pattison, 34][John Doe, 41], [Lucy Brown, 29], [Paul Brown, 33], [Thomas Pattison, 34]The users dictionary is empty

C# ContainsKey和ContainsValue方法

ContainsKey()方法确定字典是否包含指定的键,ContainsValue()方法确定字典是否包含指定的值。

Program.cs

using System;using System.Collections.Generic;namespace CheckElements{    class Program    {        static void Main(string[] args)        {            var domains = new Dictionary<string, string>            {                {"sk", "Slovakia"},                {"ru", "Russia"},                {"de", "Germany"},                {"no", "Norway"}            };            var key = "sk";            if (domains.ContainsKey(key))            {                Console.WriteLine("The {key} key is in the dictionary");            } else            {                Console.WriteLine("The {key} key is in not the dictionary");            }            var value = "Slovakia";            if (domains.ContainsValue(value))            {                Console.WriteLine("The {value} value is in the dictionary");            } else            {                Console.WriteLine("The {value} value is in not the dictionary");            }        }    }}

在示例中,我们检查字典中是否存在"sk"键和"Slovakia"值。

$ dotnet runThe sk key is in the dictionaryThe Slovakia value is in the dictionary

C# 遍历字典

有几种遍历 C# 字典的方法。

Program.cs

using System;using System.Collections.Generic;namespace Traversing{    class Program    {        static void Main(string[] args)        {            var domains = new Dictionary<string, string> {                {"sk", "Slovakia"},                {"ru", "Russia"},                {"de", "Germany"},                {"no", "Norway"}            };            foreach (var (key, value) in domains)            {                Console.WriteLine("{key}: {value}");            }            Console.WriteLine("**************************************");            foreach (var kvp in domains)            {                Console.WriteLine("{kvp.Key}: {kvp.Value}");            }            Console.WriteLine("**************************************");            // oldschool            foreach (KeyValuePair<string, string> entry in domains)            {                Console.WriteLine($"{entry.Key}: {entry.Value}");            }        }    }}

该示例使用foreach遍历字典。

foreach (var (key, value) in domains){    Console.WriteLine($"{key}: {value}");}

在此 foreach 循环中,我们成对浏览字典。 每对都分解为其键和值。

foreach (var kvp in domains){    Console.WriteLine($"{kvp.Key}: {kvp.Value}");}

在这种情况下,我们通过Key和Value属性访问键和值。

// oldschoolforeach (KeyValuePair<string, string> entry in domains){    Console.WriteLine($"{entry.Key}: {entry.Value}");}

最后,这是一种使用KeyValuePair成对遍历字典的较旧方法。

$ dotnet runsk: Slovakiaru: Russiade: Germanyno: Norway**************************************sk: Slovakiaru: Russiade: Germanyno: Norway**************************************sk: Slovakiaru: Russiade: Germanyno: Norway

C# 允许分别循环遍历键和值。

Program.cs

using System;using System.Collections.Generic;namespace Traversing2{    class Program    {        static void Main(string[] args)        {            var domains = new Dictionary<string, string>             {                {"sk", "Slovakia"},                {"ru", "Russia"},                {"de", "Germany"},                {"no", "Norway"}            };            Console.WriteLine("Keys:");            foreach (var val in domains.Keys)            {                Console.WriteLine(val);            }            Console.WriteLine("\nValues:");            foreach (var val in domains.Values)            {                Console.WriteLine(val);            }        }    }}

该示例在两个foreach循环中打印字典的所有键和所有值。

foreach (var val in domains.Keys){    Console.WriteLine(val);}

我们使用Keys属性获取所有密钥。

foreach (var val in domains.Values){    Console.WriteLine(val);}

我们使用Values属性获取所有值。

$ dotnet runKeys:skrudenoValues:SlovakiaRussiaGermanyNorway

C# 排序字典

我们可以使用 LINQ 对字典进行排序。

Program.cs

using System;using System.Collections.Generic;using System.Linq;namespace Sorting{    class Program    {        static void Main(string[] args)        {            var users = new Dictionary<string, int>()            {                { "John", 41 },                { "Jane", 38 },                { "Lucy", 29 },                { "Paul", 24 }            };            var sortedUsersByValue = users.OrderBy(user => user.Value);            foreach (var user in sortedUsersByValue)            {                Console.WriteLine($"{user.Key} is {user.Value} years old");            }        }    }}

该示例按用户年龄对字典进行排序。

var sortedUsersByValue = users.OrderBy(user => user.Value);

OrderBy()方法用于按条目的值对条目进行排序。

$ dotnet runPaul is 24 years oldLucy is 29 years oldJane is 38 years oldJohn is 41 years old

输出按字典值排序。

C# SortedDictionary

SortedDictionary表示按键排序的键/值对的集合。

Program.cs

using System;using System.Collections.Generic;namespace SortedDictEx{    class Program    {        static void Main(string[] args)        {            var sortedUsers = new SortedDictionary<string, int>()            {                { "John", 41 },                { "Jane", 38 },                { "Lucy", 29 },                { "Paul", 24 }            };            foreach (var user in sortedUsers)            {                Console.WriteLine($"{user.Key} is {user.Value} years old");            }        }    }}

该示例演示了SortedDictionary的用法。

$ dotnet runJane is 38 years oldJohn is 41 years oldLucy is 29 years oldPaul is 24 years old

输出按字典键排序。

相关推荐