如何使用列表?

时间:2013-07-30 18:33:55

标签: c# arrays list oop xna

我一直在寻找互联网,我没有找到任何关于如何使用的好视频或文字教程,这是我真正想学习的东西。

有没有人知道一个好的网站,或者有人可以解释如何使用Lists

1 个答案:

答案 0 :(得分:7)

什么是清单?

想象一下lists作为现实生活中的待办事项列表,您可以添加要做的事情,并在关闭它们时删除。您可以使用数字访问列表中的项目,只要它在范围内。

对多个对象使用Car1Car2Car3Car1SpeedCar2Speed等变量是一个常见的初学者错误,并且不满意,使用列表,类和其他object oriented techniques的组合,使这样的事情更有效,更容易维护。

数组和字典之间的差异

在我深入探讨之前澄清:Array可以被认为是固定的长度,网格的对象(数组可以可以重新调整大小,但非常昂贵)可以在1,2,3等维度中访问,具体取决于大小。当您想要提供列表功能并且能够查找项目时使用Dictionary,例如:键可以是一种食物,值可以是食谱。如果您想知道如何制作饼图,可以使用Dictionary["Pie"]找到它,但是对于列表,它只基于整数键。

如何使用列表

免责声明:老实说,我不是最好的解释员,如果有任何混淆,请抱歉:/

列表可以处理任何类型的对象,从字符串列表到您制作的任何自定义类的列表。 BaseClass列表也可以包含派生类类型的任何对象。

在我的示例中,您将有一个Cookbook,其中包含List Recipes,其中包含Ingredients列表以及其他属性

假装(甚至更好,请继续!)你有一个食谱类:

public class Recipe
{
     List<Ingredient> Ingredients;
     bool IsFavorite;
     int TimeToMake;
     string Pie;
}

一个成分类:

public class Ingredient
{
      string Name;
      int Amount;
}

显然,在生产代码中会有构造函数和各种方法,但让我们保持这一点。

假设您要创建Recipe。 (我想示例构造函数是显而易见的,只是食物名称和/或数量)

Recipe pie = new Recipie("Pie");
//Add the ingredients
pie.Ingredients.Add(new Ingredient("Apples",3)); 
pie.Ingredients.Add(new Ingredient("Dough",1));
pie.Ingredients.Add(new Ingredient("Programmers don't bake, we code - Other random sweet stuff I guess goes here",9001));
pie.TimeToMake = 60;
pie.IsFavorite = true;

您现在有一个包含项目列表的Recipe对象,请确保使用Ingredients = new List<Ingredient>();

在构造函数中初始化列表

假设你有一个Cookbook课程,你可以更进一步,并有一份食谱清单。

class Cookbook
{
     string Name;
     int Pages;
     List<Recipe> Recipes = new List<Recipe>();
}

与以前一样,您可以Add配方,其中包含Ingredient s。

Cookbook cb = new CookBook();
cb.Name = "Cyral's Tasty Delights";

cb.Recipes.Add(pie); //Add the recipe we made earlier
cb.Recipes.Add(new Recipe("Java") { /*Blah, :)*/ });

cb.Pages = 2;

希望您现在了解了哪些列表以及为何以及何时应该使用这些列表。

操纵列表并使用其数据

您可以使用许多可以使用的列表,以及可以使用它们执行的操作!

<强>循环

您可以遍历列表以读取他们拥有的信息并对其元素执行操作。

您可以使用foreach来迭代您的列表并在食谱中打印出食谱

foreach (Recipe recipe in cb.Recipes) 
{
    Console.WriteLine(recipe.Name);
}

for

for (int i = 0; i < cb.Recipes.Count; i++) //Loop through List with a for loop
{
    Console.WriteLine(cb.Recipes[i].Name);
}

在上一个示例中,您可以看到我们如何从elementindex获得i。您可以从列表中获取0List.Count范围内的任何元素。

方法和属性

操作列表有很多基本方法和属性,例如:

Clear()清除列表内容

Remove(T)与Add相反(真的!!!)

Contains(T)检查列表是否包含元素

Insert(T)在指定的索引处插入项目

Count获取元素数

HereList方法的完整列表。

进一步

扩展示例

假设您要打印有关Cookbook

的信息
Console.WriteLine(cb.Name);
Console.WriteLine(cb.Recipes.Count + " recipes to make!");
Console.WriteLine(cb.Pages + " pages of expert cooking advice!");

这将输出:

  

Cyral的美味佳肴   2个食谱!   2页专家烹饪建议!

好的,现在这些数据并不令人印象深刻,但你明白了!

<强> LINQ

我之前展示的方法,Contains(element)方法将检查列表是否包含元素。假设我们想看看元素是否是最受欢迎的,我们只能看看它是否包含&#34;包含&#34;最喜欢的。我们可以使用一组很棒的方法来操纵Enumerables LINQ

LINQquery language,可用于各种有用的操作。

我们可以使用Where(Func)扩展来实现我们的目标。

Where过滤集合中的元素和Select(稍后会详细介绍)将方法应用于列表中的每个元素。

var FavoritePicks = cb.Recipes.Where(item => item.IsFavorite);

项目变量为Recipe=>为lambda,表示&#34;转到&#34;。使用item.IsFavorite,我们现在可以对其执行查询,在本例中为,如果它是真的

您可以将此代码与Select(Func)结合使用,以执行进一步的操作,例如在所有CAPS中打印所有最喜欢的食谱。

//Apply the transformation
var v = cb.Recipes.Where(item => item.IsFavorite).Select(element => element.Name.ToUpper());
//Print the result
foreach (Recipe r in v)
{
    Console.WriteLine(r.Name + "is in all CAPS because it is such a favorite!");
}

看看它有多酷? (好吧,你可以用它做的事情:P)


列表是非常重要且基本的编程部分,这应该教会您如何使用它们的基础知识。

如果任何语法不完美,我很道歉,但它应该接近,这是我的第一个&#34;巨大的&#34;毕竟,我试着不要让它听起来像一个完整的教程:)

我会推荐精彩的网站 DotNetPerls 以及他们的ListLINQ教程。

快乐的编码!