C#遍历大量的数据foreach循环C#游戏开发快速入门大学霸

C#遍历大量的数据foreach循环C#游戏开发快速入门大学霸

明明白白学C#

明明白白学C#

5.3.2  遍历大量的数据C#遍历大量的数据foreach循环C#游戏开发快速入门大学霸

如果需要在脚本中使用同样的操作去一一判别大量的数据,C#倒是提供了一种不错的机制,读者或许会有兴趣,就是“循环”。C#里有3种用于实现循环的语句,分别是:foreach、for和while。本小节打算依次介绍它们的使用方法,最后再将这种机制应用到游戏中。

1.foreach循环C#遍历大量的数据foreach循环C#游戏开发快速入门大学霸

为了更好的说明foreach循环的使用方法,下面将演示一个示例,此示例会使用foreach循环遍历数组、列表和字典里的所有数据,并使用if语句选择所需的数据。为MyScript脚本添加下面的代码:

01     using UnityEngine;

02     using System.Collections.Generic;

03

04     public class MyScript : MonoBehaviour

05     {

06              void Start()

07              {

08                       string[] myArray = new string[] {“Monday”,”Tuesday”,”Wednessday”};

09                       foreach(string myStrArray in myArray)                                        //循环遍历数组

10                       {

11                                 if(myStrArray == “Monday”)

12                                          Debug.Log(“There is “+myStrArray+” in array.”);

13                       }

14

15                       List<string> myList = new List<string> {“Monday”,”Tuesday”,”Wednessday”};

16                       foreach(string myStrList in myList)                                              //循环遍历列表

17                       {

18                                 if(myStrList == “Tuesday”)

19                                          Debug.Log(“There is “+myStrList+” in list.”);

20                       }

21

22                       Dictionary<int,string> myDict = new Dictionary<int,string>

23                                          {{10,”Monday”},{20,”Tuesday”},{30,”Wednessday”}};

24                       foreach(KeyValuePair<int,string> myStrDic in myDict)          //循环遍历字典

25                       {

26                                 if(myStrDic.Key == 30)

27                                          Debug.Log (“There is “+myStrDic.Value+” in dictionary”);

28                       }

29              }

30     }

运行游戏,在Console视图里查看脚本输出的信息,如图5-16所示。

图5-16  使用foreach循环的示例C#遍历大量的数据foreach循环C#游戏开发快速入门大学霸

q  脚本08、15和22行的代码,分别声明了数组、列表和字典,并且为它们初始化了3组数据;

q  脚本09、16和24行的代码,则分别开始使用foreach语句遍历数组、列表和字典。以09行的语句为例:

09                       foreach(string myStrArray in myArray)                                        //循环遍历数组

foreach后括号“( )”里的语句,表示的含义是:要遍历的是myArray数组,而数组中的每个数据都将先被存储于同类型的myStrArray变量中。语句的书写格式如下:

foreach(数据类型 变量名 in 数组名)

q  脚本11、18和26行的代码,分别使用if语句判断变量中的数据,是否是指定的数据。以11行的代码为例:

11                                 if(myStrArray == “Monday”)

if后括号“( )”里的语句,是一个关系表达式,当变量myStrArray里的数据字符串是Monday时,表达式的值才是true。

q  脚本12、19和27行的代码,则表示当使用if语句判断出数组、列表和字典中存在指定数据时,会输出文字信息到Console视图。以12行的代码为例:

12                                          Debug.Log(“There is “+myStrArray+” in array.”);

如果数组中存在数据“Monday”,则会在Console视图里输出“There is Monday in array”。

2.for循环

for循环也可以遍历数组、列表与字典中的所有数据,但是它与foreach语句的些许区别在于,for循环表达的含义更像是:让一段代码执行指定的次数。例如,执行5次输出语句,做10次同样的操作等等。下面是使用for循环的一个简单示例:

01     using UnityEngine;

02     using System.Collections.Generic;

03

04     public class MyScript : MonoBehaviour

05     {

06              void Start()

07              {

08                       List<string> myList = new List<string> {“Monday”,”Tuesday”,”Wednessday”};

09                       for(int i = 0;i < myList.Count;i++)

10                       {

11                                 Debug.Log(myList[i]);

12                                 if(myList[i] == “Tuesday”)

13                                          Debug.Log(“There is “+myList[i]+” in list.”);

14                       }

15              }

16     }

运行游戏,在Console视图里查看脚本输出的信息,如图5-17所示。

 

图5-17  使用for循环的示例

q  脚本08行的代码,声明了一个列表,且为列表添加了3组数据

q  脚本09行的代码,就是一个for语句,如下:

09                       for(int i = 0;i < myList.Count;i++)

for后面括号里的语句,所表示的含义是:一共要循环myList.Count次。变量i类似于一个计数器,记录着当前循环的次数。例如,要循环15次,可以使用下面的for循环语句:

for(int i = 0;i < 15;i++)

q  脚本11~13行的多条语句,是要执行指定循环次数的代码。其中11行的语句用于在Console视图中输出列表中的所有数据;12、13行的代码,是一个if语句,用于判断列表中是否存在指定的数据,如果存在就会输出相应的信息到Console视图;

3.while循环

while循环与for循环的操作效果是相同的,即让循环执行一定的次数。但不同的是,从for循环的语句中可以很明确的看出循环的次数,在达到指定次数以后就停止。while循环表达的没有这么明确,但它会明确的告诉Unity,什么时候停止循环。下面的脚本代码,是将for循环的示例改写成了while循环,如下:

01     using
UnityEngine;

02     using System.Collections.Generic;

03

04     public class MyScript : MonoBehaviour

05     {

06              void Start()

07              {

08                       List<string> myList = new List<string> {“Monday”,”Tuesday”,”Wednessday”};

09                       int i = 0;

10                       while(i < myList.Count)

11                       {

12                                 Debug.Log(myList[i]);

13                                 if(myList[i] == “Tuesday”)

14                                          Debug.Log(“There is “+myList[i]+” in list.”);

15                                 i++;

16                       }

17              }

18     }

运行游戏,在Console视图里查看脚本输出的信息,如图5-18所示。

 

图5-18  使用while循环的示例

q  脚本10行的语句,就是while循环语句,它后面的括号里,只有一个关系表达式,此关系表达式决定了循环在什么时候结束;

其它部分与for循环的示例一样,这里就不做重复说明了C#遍历大量的数据foreach循环C#游戏开发快速入门大学霸。

Comments are closed.