D-24 资料结构 data structure ? List ? Dictionary

还有一种回圈

昨天介绍时大头还有一个回圈的方式没有介绍,为什麽昨天不介绍呢,是因为篇幅关系还是有其他原因,让我们看下去。

本文同步放置於此

未介绍 foreach的原因

「前辈早,赶快来介绍昨天没讲的foreach吧,为啥昨天要卖关子呢?」
一大早小光就迫不急待的想跟大头请教foreach的事情,听到这个大头依旧从文件中抬起头来,经过昨天的休息大头的黑眼圈不见了,反而是小光脸上多了黑眼圈。
「好喔我们来开始说明一下foreach罗,不过你是怎麽了?」
结果小光不好意思的已笑带过。接着大头就开始介绍foreach

foreach

简单说起来foreach就是巡访变数中的元素,所以写起来如下。

foreach(var item in list)
{
    // do something 
}

in 後面要放什麽

「前辈,我有一个问题,关於上述例子之中in後面要放什麽?」
大头听到这问题表现出赞赏的表情,并且开始说明这个问题。
「不错,很专心在听,in後面放的就是变数」
「蛤⋯变数」
听到这答案让小光很讶异,然後大头却哈哈大笑起来。
「没错是变数,但是不是普通的变数,是一种可以巡访的变数,让我来慢慢跟你解释。」

IEnumerable

刚刚in後面要接的变数是继承IEnumerable介面的物件的变数,至於什麽是IEnumerable就请大家看一下msdn IEnumerable,不过简单讲就是他有实作巡访功能的物件。

资料结构 data structure

好了,介绍完foreachIEnumerable之後相信读者们应该跟小光一样满头问号,其实简单说明就是大家还不认识资料结构这个东西,所以关於资料结构是什麽请大家先看一下wiki 资料结构的说明,简单讲就是存放资料的一种结构,由於目前大多数语言都有实作这些类型的资料结构,所以读者们不需要去实作,不过还是要去了解各个结构的特性,接下来我们来说明一下ListDictionary这两种资料结构。

List

首先我们先来看看msdn List的内容,简单用法不外乎是新增、删除、更新以及列出容器内的数量还有巡访这些需求,与接下来要说明的Dictionary差别在於它是一个连续的资料,当要取得该资料时除非知道他是第几个位置否则就要一个一个地寻找,因此记忆体使用较Dictionary少,但是寻找特定元素的效率较低,下面列出其新增、删除、更新以及列出容器内的数量还有巡访的语法。

// List的初始化
var list = new List<int>(){1,2,3,4,5,6};

// 新增
list.Add(3);

// 取出第三个位置的资料
var item = list[3];

// 移除刚刚取出的资料
list.Remove(item);

// 删除第0个的资料
list.RemoveAt(0);

// 列出数量
Console.WriteLine(list.Count);

// 巡访
foreach(var ite in list)
{
    Console.WriteLine(ite);
}

写完之後发现有个要注意的事项,就是List的位置第一个的是0以此类推,使用时不要弄错罗。

Dictionary

介绍完ListDictionary就比较简单了,简单说明就是说多了一个旅社大厅来告诉使用者变数住在哪里,而不用自己去记说变数住在哪里,所以在找的时候也不需要一间房间一间房间的看,所以找特定资料的速度快很多,不免俗地也将资料的处理式子纪录在下面。

// Dictionary的初始化
var dic = new Dictionary<string, int>()
{
    {"1", 1},
    {"2", 2},
    {"3", 3},
    {"4", 4},
    {"5", 5},
    {"6", 6}
};

// 新增
dic.Add("7", 7);

// 取值
var item = dic["3"];

// 删除值
dic.Remove("3");

// 列出个数
Console.WriteLine(dic.Count);

// 巡访
foreach(var ite in dic)
{
	Console.WriteLine(ite.Key);
	Console.WriteLine(ite.Value);
	Console.WriteLine(ite);
}

最後要记住因为是一人一间房,所以不能两个变数放在同一个Key里面喔。

後记

「前辈怎麽今天讲完後我整个头昏脑胀的?」
当大头说完後,小光整个呈现昏迷的状况,这时大头一边哈哈大笑一边对他这麽说。
「後头昏眼花代表你有认真听,但是还不能吸收,我建议你去看看资料结构与演算法的书,相信对你有所帮助。」
听完之後小光似懂非懂的点点头,不过过几秒後又这麽问到。
「那什麽是物件跟介面?」
听到这相信读者应该会有同样的问题,不过待後续会在跟大家介绍,敬请期待。


<<:  Day 6 追加训练

>>:  [DAY 06]物品拍卖价格查询功能(4/4)

Swift 新手-如何使用 Xcode 建立专案?

Xcode 版本 12.5 介面 点选 ios app 建立专案范本,范本有内建预设程序码,协助快速...

【在厨房想30天的演算法】Day 29 资讯安全与演算法 : 数位签章

Aloha!我是少女人妻 Uerica!话说你们知道哈利波特的角色中谁最有主见吗~佛地魔!因为他不会...

第四章之三

续前面所述,这次要跟各位介绍的是档案上传与资料库功能,Filemanager应在其他平台有都会有类似...

亿品锅 - 台中高工店 $130元也可以吃到饱

我今天选的是龙骨汤底+羊肉 (白饭是无限量供应的,淋上猪油,不小心就吃掉2碗了) 吃到饱这系列,三不...

[Day13] Android - Kotlin笔记:Parcelable & Serializable 与 SafeArgs的传递

这边简单介绍两者差异和选择: Parcelable: 效能比Serializable好,在记忆体开销...