Dictionary详解(C#)

Dictionary定义:

在C#中,Dictionary能提供快速的基于键值的元素查找。我们先来看一下源代码:

public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>, IReadOnlyCollection<KeyValuePair<TKey, TValue>>, ISerializable, IDeserializationCallback

从源代码可以看到,Dictionary继承了很多父类。大体的功能就是让他能实现枚举,快速查找,比较,筛选等基本操作。
Dictionary包含在System.Collections.Generic名空间中。在使用前,必须要声明它的键类型和值类型。

从源代码可以看到,他的结构是这样的:Dictionary

1、从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成

2、任何键都必须是唯一的

3、键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值

4、Key和Value可以是任何类型(string,int,或自定义类型)

Dictionary的使用示例:

在开发中,我需要将Revit族文件的路径和Revit的Family对应起来。

声明一个Dictionary, key 的类型为string , value的类型为Family

Var familys = new Dictionary<string, Family>();

打开窗口,让用户选择多个族文件,并且将族文件的路径和对应的Family添加进Dictionary


public List<string> Profiles { get; set; }

            OpenFileDialog dialog1 = new OpenFileDialog();
            dialog1.Multiselect = true;
            dialog1.Filter = "族文件(*.rfa)|*.rfa";
            if (dialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Profiles.Clear();
                Profiles.AddRange(dialog1.FileNames);
            }
                using (Transaction t=new Transaction(famDoc,"载入轮廓"))
                {
                    t.Start();
                    foreach (string item in Profiles)
                    {
                        Family Family_temp;
                        if (!famDoc.LoadFamily(item, out Family_temp))
                        {
                            TaskDialog.Show("错误", "载入轮廓族失败!");
                            return false;
                        }
                        familys.Add(item, Family_temp);
                    }
                   t.Commit();
                }
            

通过路径取到对应的Family

 Family family = familys[path];
 IEnumerator<ElementId> enumerator = family.GetFamilySymbolIds().GetEnumerator();
 enumerator.Reset(); enumerator.MoveNext();
 FamilySymbol symbol = famDoc.GetElement(enumerator.Current) as FamilySymbol;
 FamilySymbolProfile profile = m_UIApp.Application.Create.NewFamilySymbolProfile(symbol);

其它常见属性和方法:

Comparer: 获取用于确定字典中的键是否相等的 IEqualityComparer。
Count: 获取包含在 Dictionary中的键/值对的数目。
Item: 获取或设置与指定的键相关联的值。
Keys: 获取包含 Dictionary中的键的集合。
Values: 获取包含 Dictionary中的值的集合。
Add: 将指定的键和值添加到字典中。
Clear: 从 Dictionary中移除所有的键和值。
ContainsKey: 确定 Dictionary是否包含指定的键。
ContainsValue: 确定 Dictionary是否包含特定值。
GetEnumerator: 返回循环访问 Dictionary的枚举器。
GetType: 获取当前实例的 Type。 (从 Object 继承。)
Remove: 从 Dictionary中移除所指定的键的值。
ToString: 返回表示当前 Object的 String。 (从 Object 继承。)
TryGetValue: 获取与指定的键相关联的值。

你可能感兴趣的:(C#基础知识,c#)