亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

自寫一個模仿Dictionary與Foreach的實現及心得總結

2024-07-10 13:17:24
字體:
來源:轉載
供稿:網友
自己寫一個類模仿Dictionary實現
a、自定義字典類MyDic

復制代碼 代碼如下:


using System.Collections.Generic;
namespace _10_自己寫Dictionary {
class KeyValuePair {
public KeyValuePair() {
}
public KeyValuePair(string key, string value) {
this.key = key;
this.value = value;
}
private string key;
public string Key {
get {
return key;
}
set {
key = value;
}
}
private string value;
public string Value {
get {
return this .value;
}
set {
this.value = value ;
}
}
}
class MyDic {
List<KeyValuePair > list = new List<KeyValuePair >();
public void Add(string key, string value) {
list.Add( new KeyValuePair (key, value));
}
public bool ContainsKey(string key) {
bool res = false ;
foreach(KeyValuePair item in list) {
if(item.Key == key) {
res = true;
break;
}
}
return res;
}
}
}


b、調用測試

復制代碼 代碼如下:


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace _10_自己寫Dictionary {
class Program {
static void Main(string[] args) {
//Dictionary方法實現
Dictionary<string , string> dic = new Dictionary <string, string>();
string[] filecon = File .ReadAllLines("英漢詞典TXT格式.txt", Encoding.Default);
for(int i = 0; i < filecon.Count(); i++) {
string[] arr = filecon[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if(!dic.ContainsKey(arr[0])) {
dic.Add(arr[0], arr[1]);
}
}
Stopwatch sw = new Stopwatch();
sw.Start();
dic.ContainsKey( "china");
sw.Stop();
Console.WriteLine(sw.Elapsed);//00:00:00:0000055;
//自己寫的list實現
MyDic mydic = new MyDic();
string[] filecon2 = File .ReadAllLines("英漢詞典TXT格式.txt", Encoding.Default);
for(int i = 0; i < filecon2.Count(); i++) {
string[] arr = filecon2[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if(!mydic.ContainsKey(arr[0])) {
mydic.Add(arr[0], arr[1]);
}
}
Stopwatch sw2 = new Stopwatch();
sw2.Start();
mydic.ContainsKey( "china");
sw2.Stop();
Console.WriteLine(sw2.Elapsed);//00:00:00:0001287;慢了多少倍!??! 因為dictionary比list多了字典目錄
Console.Read();
}
}
}


b中測試結果顯示自己模仿的沒有.Net FrameWork提供的快 為什么呢?

答:Dictionary中有一個存儲鍵值對的區域,這個區域的每個存儲單元有地址編號,根據hashCode算法,計算key的值的鍵值對應該存儲的地址,將鍵值對放入指定的地址即可。查找的時候首先計算key的地址,就可以找到數據了。根據key找房間號,而不是逐個房間找。(*)或者說:當把一個kvp,采用一個固定算法(散列算法)根據key來計算這個kvp存放的地址。取的時候也是根據要找的key可以快速算出kvp存放的地址。

面試題中經常會問Foreach實現了什么接口這個問題很好回答,那我們能不能自己模仿實現Foreach呢?
c、Foreach內部原理:IEnumerable接口 自己實現IEnumerable

復制代碼 代碼如下:


using System.Collections;//引入IEnumerable所在命名空間
namespace IEnumerater {
class MyList : IEnumerable {//實現接口IEnumerable 它就一個IEnumerator聲明枚舉器的方法
ArrayList ary = new ArrayList();
public void Add(string name) {
ary.Add(name);
}
//自己寫索引器 形式類似屬性 作用類似枚舉 方便快捷的方式 訪問集合中的元素
public string this[ int index] {//int類型
get {
return ary[index].ToString();
} //index>ary.Count時超出索引界限
//set { }
}
public int this[ string name] {//string類型 通過name查找索引 參數類型自己決定 返回類型自己決定
get {
for(int i = 0; i < ary.Count; i++) {
if(ary[i] == name) {
return i;
}
}
return -1;
}
}
public IEnumerator GetEnumerator() {//IEnumerator F12跳轉定義這里可以發現foreach只允許讀取數據,而不能修改數據
for(int i = 0; i < ary.Count; i++) {
yield return ary[i].ToString();// yield關鍵字 可以看到 實現IEnumerator(枚舉器)接口中MoveNext(指向下一條)方法 和Current(獲取當前元素 因為只有get 所以可以理解為什么foreach不能修改值的原因了) 以及Reset重置索引
}
}
}
}


d、調用自己的IEnumerable

復制代碼 代碼如下:


using System;
namespace IEnumerater {
class Program {
static void Main(string[] args) {
//自己寫一個類 實現了IEnumerable接口的getEnumerator()方法 就可以實現foreach的操作
MyList mylist = new MyList();
mylist.Add( "wanghao");//調用自己的add(string)方法
mylist.Add( "nihao");
mylist.Add( "buhao");
Console.WriteLine(mylist[1]);//使用自己的索引
Console.WriteLine(mylist["nihao" ].ToString());
foreach(string item in mylist) {
Console.WriteLine(item);
//item = "hello"; 不能使用foreach改變值
}
Console.Read();
}
}
}


總結:
如果一個類進行foreach的話,該類必須實現IEnumerable,集合要支持foreach方式的遍歷,必須實現IEnumerable接口(還要以某種方式返回實現了IEnumerator 的對象)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产美女精品视频免费观看| 精品久久久久久中文字幕一区奶水| 91久久精品久久国产性色也91| 国产精品美女主播| 亚洲国产精品va在线观看黑人| 欧美性黄网官网| 欧美精品电影在线| 日韩成人激情视频| 欧美高清激情视频| 久久影院在线观看| 欧美日韩视频免费播放| 国产欧美精品一区二区三区介绍| 蜜臀久久99精品久久久久久宅男| 久久97精品久久久久久久不卡| 91精品国产99| 91av视频在线免费观看| 欧美成人中文字幕| 欧美午夜影院在线视频| 欧美高清在线播放| 亚洲高清一区二| 亚洲一区美女视频在线观看免费| 欧美怡春院一区二区三区| 久久久爽爽爽美女图片| 中文字幕亚洲欧美一区二区三区| 亚洲一区二区国产| 日韩在线观看网站| 久久久女女女女999久久| 日韩在线观看高清| 日韩精品一区二区视频| 国产精品久久久久91| 欧美午夜精品久久久久久浪潮| 北条麻妃久久精品| 日韩精品免费在线观看| 日韩av电影在线网| 色多多国产成人永久免费网站| 国产精品高清免费在线观看| 日韩成人激情在线| 久久黄色av网站| 91极品女神在线| 亚洲国产精品悠悠久久琪琪| 久久国产精品久久精品| 欧美大尺度电影在线观看| 51精品国产黑色丝袜高跟鞋| 欧美亚洲激情视频| 一区二区亚洲欧洲国产日韩| 亚洲影视中文字幕| 精品国产网站地址| 国产午夜精品免费一区二区三区| 欧美一乱一性一交一视频| 亚洲综合国产精品| 日韩成人高清在线| 欧美最近摘花xxxx摘花| 久久成人在线视频| 欧美日韩亚洲精品一区二区三区| 亚洲欧美激情一区| 久久成年人视频| 欧美亚洲日本网站| 亚洲一区二区日本| 国产精品成人av性教育| 久久精品久久久久电影| 一个人看的www欧美| 欧美成人在线免费| 国产成人亚洲综合91| 97在线精品视频| 狠狠躁18三区二区一区| 成人午夜黄色影院| 欧美成年人视频网站欧美| 欧美午夜视频在线观看| 日韩成人性视频| 亚洲成成品网站| 国内精品小视频| 色偷偷亚洲男人天堂| 亚洲人免费视频| 777午夜精品福利在线观看| 亚洲高清色综合| 亚洲一区二区三区在线视频| 国产亚洲欧洲在线| 91久久在线观看| 亚洲人成五月天| 日韩av中文字幕在线播放| 国内外成人免费激情在线视频网站| 成人国产精品久久久久久亚洲| 亚洲午夜未满十八勿入免费观看全集| 国产精品观看在线亚洲人成网| 精品偷拍各种wc美女嘘嘘| 欧美电影免费观看电视剧大全| 91国产中文字幕| 亚洲精品久久久久久下一站| 精品久久久久久亚洲国产300| www日韩欧美| 91网站在线免费观看| 欧美日韩国产91| 国产精品嫩草影院久久久| 欧美激情高清视频| 亚洲爱爱爱爱爱| 久久亚洲私人国产精品va| 中文字幕国产日韩| 久久五月天色综合| 亚洲精品色婷婷福利天堂| 久久夜色精品亚洲噜噜国产mv| 亚洲国产欧美一区二区三区久久| 国产精品jizz在线观看麻豆| 亚洲欧洲一区二区三区久久| 国产精品久久久久久久久久东京| 欧美激情一区二区三区高清视频| 国产亚洲综合久久| 欧美不卡视频一区发布| 日韩精品免费观看| 欧美大片欧美激情性色a∨久久| 久久久精品视频在线观看| 精品欧美激情精品一区| 国外成人在线播放| 亚洲成色777777在线观看影院| 亚洲欧美成人在线| 亚洲精品久久久久国产| 欧美丝袜第一区| 国产精品免费在线免费| 国产精品久久久久久婷婷天堂| 欧美成人在线网站| 成人网在线观看| 欧美一级黄色网| 国内免费精品永久在线视频| 日本久久久久亚洲中字幕| 一夜七次郎国产精品亚洲| 国产在线视频91| 欧美激情视频一区二区三区不卡| 精品久久久免费| 欧美日本中文字幕| 91精品国产乱码久久久久久久久| 久久久久中文字幕2018| 91免费版网站入口| 精品久久久久久久中文字幕| 国产精品一二三在线| 亚洲电影免费观看高清完整版| 成人午夜黄色影院| 国产一级揄自揄精品视频| 日韩av网址在线| 国产成人综合一区二区三区| 日韩视频中文字幕| www.亚洲一区| 久久国产精品久久久久久久久久| 亚洲高清色综合| 国产91色在线| 欧美午夜性色大片在线观看| 欧美色欧美亚洲高清在线视频| 亚洲免费av网址| 亚洲精品视频网上网址在线观看| 国产精品444| 精品免费在线视频| 国产精品免费视频久久久| 欧美中文在线观看国产| 亚洲天堂男人的天堂| 欧美激情在线视频二区| 国产一区二区三区在线观看网站| 欧美麻豆久久久久久中文| 国产精品免费电影| 深夜福利日韩在线看| 亚洲一区二区三区视频| 亚洲欧美制服综合另类| 亚洲欧美制服第一页| 国产一区二区三区丝袜| 欧美性理论片在线观看片免费| 久久精品久久久久电影| 久久视频精品在线|