找回密码
 立即注册
查看: 298|回复: 0

Unity学习路线-理论知识部分-C#-C#其他-GetEnumerator用法 ...

[复制链接]
发表于 2023-3-14 19:31 | 显示全部楼层 |阅读模式
GetEnumerator是返回实例的枚举数。
换句话说就是返回集的中所有元素一个一个列出来。我们可以通过MoveNext()得到集合中的所有元素。
这里的名词稍微说明一下,
    枚举:就是一个一个的列举。
    枚举数:是循环访问其关联集合的对象。它提供一种方法帮助你遍历一个集合。
GetEnumerator用法请看下边代码。 这里顺便作了测试。发现GetEnumerator要比Foreach稍微快一点。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Diagnostics;
using System.Collections;

namespace GetEnumeratorTest
{
    class Program
    {
        static void Main(string[] args)
        {
            const int times =1000;
            Stopwatch watch = new Stopwatch();
            Hashtable hastable = new Hashtable();
            for (int i = 0; i < 10000; i++)
            {
                hastable.Add(i, i.ToString() + "值");
            }
            //测试GetEnumerator
            watch.Start();
            for (int i = 0; i < times; i++)
            {
                IDictionaryEnumerator enumerator = hastable.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    string key = enumerator.Key.ToString();
                    string value = enumerator.Value.ToString();
                }
            }
            watch.Stop();
            Console.WriteLine("Hashtable GetEnumerator耗时" + watch.ElapsedMilliseconds);
            Console.WriteLine("---------------");

            watch.Reset();
            //测试ForEach
            watch.Start();
            for (int i = 0; i < times; i++)
            {
                foreach (object item in hastable.Keys)
                {
                    string key = item.ToString();
                    string value = hastable[item].ToString();
                }
            }
            watch.Stop();
            Console.WriteLine("Hashtable ForEach耗时" + watch.ElapsedMilliseconds);
            Console.WriteLine("---------------");

            watch.Reset();
            Dictionary<int, string> dictionary = new Dictionary<int, string>();
            for (int i = 0; i < 10000; i++)
            {
                dictionary.Add(i, i.ToString() + "值");
            }
            watch.Start();
            for (int i = 0; i < times; i++)
            {               
                Dictionary<int,string>.Enumerator enumerator = dictionary.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    int key = enumerator.Current.Key;
                    string value = enumerator.Current.Value;
                }
            }
            watch.Stop();
            Console.WriteLine("Dictionary GetEnumerator耗时" + watch.ElapsedMilliseconds);
            Console.WriteLine("---------------");

            watch.Reset();
            //测试ForEach
            watch.Start();
            for (int i = 0; i < times; i++)
            {
                foreach (int item in dictionary.Keys)
                {
                    int key = item;
                    string value = dictionary[item];
                }
            }
            watch.Stop();
            Console.WriteLine("Dictionary ForEach耗时" + watch.ElapsedMilliseconds);
            Console.WriteLine("---------------");
            Console.ReadKey();
        }
    }
}
结果:
    Hashtable GetEnumerator耗时 1584
    Hashtable ForEach耗时 1884
    Dictionary GetEnumerator耗时 365
    Dictionary ForEach耗时 375
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 18:46 , Processed in 0.087441 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表