Dictionary List类使用

泛型最常见的用途是创建集合类。 .NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList HashTable 等。 下面我们就来说下,几个泛型集合类的用法:
.Dictionary  HashTable 类似 此类在 .NET Framework 2.0 版中是新增的。表示键和值的集合。命名空间 :System.Collections.Generic ,程序集 :mscorlib (在 mscorlib.dll 中)     class TestGenericList     {          static void Main()         {  // 声明对象,参数表示,键是 int 类型,值是 string 类型             Dictionary<int, string> fruit = new Dictionary<int, string>();             try{              // 加入重复键会引发异常                 fruit.Add(1, " 苹果 ");                 fruit.Add(2, " 桔子 ");                 fruit.Add(3, " 香蕉 ");                 fruit.Add(4, " 菠萝 ");               // 参数错误将引发异常 , 如下所示   //fruit.Add("5", "aa");             }             catch (ArgumentException)             {                 Console.WriteLine(" 添加错误!!! ");             }  // 因为引入了泛型,所以键取出后不需要进行 Object int 的转换,值的集合也一样             foreach (int i in fruit.Keys)             {                 Console.WriteLine(" 键是: {0}  值是: {1}",i,fruit);             }
按键值对遍历 : foreach(KeyValuePair keyValue in fruit) { Console.WriteLine(" 键是: {0}  值是: {1}", keyValue.Key, keyValue.Value); }       // 删除指定键,值             fruit.Remove(1);              // 判断是否包含指定键             if (fruit.ContainsKey(1))             {                 Console.WriteLine(" 包含此键 ");             }             // 清除集合中所有对象             fruit.Clear();         }     } Dictionary 遍历输出的顺序,就是加入的顺序,这点与 Hashtable 不同,其它方法如: ContainsKey ContainsValue Remove 等,使用方法基本一致。
二、 List 注意:此类在 .NET Framework 2.0 版中是新增的。表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。命名空间 :System.Collections.Generic ,程序集 :mscorlib (在 mscorlib.dll 中), List 类是 ArrayList 类的泛型等效类。
   // 声明一个泛型类        class TestGenericList     {         static void Main()         {             // 声明一个 List 对象和 ArrayList 对应 ,只加入 string 参数             List<string> names = new List<string>();             names.Add(" 乔峰 ");             names.Add(" 欧阳峰 ");             names.Add(" 马蜂 ");             // 遍历 List             foreach (string name in names)             {                 Console.WriteLine(name);             }             // List 中插入元素             names.Insert(2, " 张三峰 ");             // 移除指定元素             names.Remove(" 马蜂 ");                    }     } 在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。 如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。
如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。
其实我们也可以自己定义一个泛型类,如下所示:    // 声明一个泛型类     public class ItemList<T>     {         void Add(T item) { }     }     class TestGenericList     {         private class ExampleClass { }         static void Main()         {             // 声明一个对象,只能加入 int             ItemList<int> list1 = new ItemList<int>();
            // 声明一个对象,只能加入 Student 类型, Student 类为自定义类             ItemList<Student> list2 = new ItemList<Student>();
        }     }
泛型的用法还有很多种,如泛型方法,泛型委托,泛型接口等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Qt ,您可以使用 `QMap` 或 `QHash` 来实现似字典(键值对)的功能。这两个都是 Qt 提供的哈希表的实现,用于存储键值对数据。 下面是一个示例代码,展示如何使用 `QMap` 来创建一个似字典的数据结构: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个 QMap 对象 QMap<QString, int> dictionary; // 向字典添加键值对 dictionary.insert("apple", 5); dictionary.insert("banana", 3); dictionary.insert("orange", 8); // 使用键访问值 int appleCount = dictionary.value("apple"); // 获取 apple 对应的值,结果为 5 // 修改键对应的值 dictionary["banana"] = 6; // 修改 banana 对应的值为 6 // 遍历字典的键值对 for (auto it = dictionary.begin(); it != dictionary.end(); ++it) { QString key = it.key(); int value = it.value(); qDebug() << key << ":" << value; } return app.exec(); } ``` 在上面的示例,我们创建了一个 `QMap<QString, int>` 对象作为字典。我们使用 `insert()` 函数向字典添加键值对,并使用 `value()` 函数通过键来访问对应的值。我们还可以直接使用 `[]` 运算符来修改键对应的值。最后,我们使用迭代器遍历字典的键值对,并打印出来。 除了 `QMap`,您还可以使用 `QHash` 来实现似的字典功能。`QHash` 的使用方式与 `QMap` 似,只是在某些情况下,`QMap` 可能会保持键的有序性,而 `QHash` 则不会。 希望这能帮到您!如果有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值