-3

我是一名新的 c# 开发人员,我正在学习 c#。现在,我有一个非常小的项目,我应该编写自己的通用列表类来存储数据。我不允许使用任何 .NET 集合类。我的班级应该有添加/删除列表中项目数量的项目和属性的方法。由于我不允许使用任何 .NET 集合类,我的列表应该存储在我的类中的一个数组中。

那么,到目前为止我做了什么?由于我不知道如何开始,我只是写下了用于了解下一步应该做什么的方法:

public class myList
{
    public void addItem()
    {

    }

    public void removeItem()
    {

    }
}

现在,我很迷茫,接下来我该怎么办?

4

5 回答 5

4

我建议您在 MSDN 上阅读如何使用数组:http: //msdn.microsoft.com/en-us/library/aa288453 (v=vs.71).aspx 。一般来说,要求社区为您编写代码是一种不好的形式,但这里有一些提示:

  • 编写一个构造函数来用一个对象数组初始化列表,例如public myListClass(object[] items)
  • 您的 addItem 类应该传递您尝试添加的对象,因此:public void addItem(object newItem)
  • 您的 removeItem 应该有几个不同的重载,以便您可以确定要删除的内容。例如remoteItem(int itemIndex)removeItem(string itemKey)removeItem(object item)
  • 您可能希望将数组的当前大小存储为私有变量,并在每次添加项目时将其递增 1。然后,您声明一个更大尺寸的新数组并将原始项目复制到其中。最后复制新项目。
  • 您可能还需要一个排序方法,但这完全取决于将存储在数组中的对象的复杂程度。
  • 尽管您可能会发现有必要计算项目的数量等,但在删除项目时您可能不必减小数组的大小。如果每次删除项目时不减小数组的大小,请务必添加项目时要考虑到这一点(因为它可能已经足够大了)。
  • 编写一个 count() 方法来返回数组中的项目数 - 如果在删除项目时不减小数组的大小,请使用它来检查空值。

还有很多其他的考虑,尤其是使用泛型来允许存储多种类型。我建议围绕这个主题阅读一点:http: //msdn.microsoft.com/en-gb/library/512aeb7t.aspx

祝你好运!

于 2013-02-25T09:19:18.740 回答
1

您需要将“列表”中的项目存储在数组中(您班级的私人成员)。

问题是数组具有固定大小(您不能只向其中添加项目)。所以你需要给它一些初始大小并记住它有多“满”。当您需要更多空间时,您需要创建一个新的、更大的数组并从原始数组复制项目。

于 2013-02-25T09:11:05.603 回答
1

给你,不是特别优雅,但仍然是一个起点,它不使用 .net 集合类

public class Program
{
    public static void Main()
    {
        myList<int> lst = new myList<int>();
        lst.addItem(10);
        lst.addItem(20);
        lst.addItem(30);

        foreach (var i in lst.getItems())
        {
            Console.WriteLine(i);
        }

        lst.removeItem(20);

        foreach (var i in lst.getItems())
        {
            Console.WriteLine(i);
        }

        Console.ReadLine();

    }
}


public class myList <T>
{
    private T[] items = new T[0];

    public void addItem(T item)
    {
        Array.Resize(ref items, items.Count() + 1);
        items[items.Count()-1] = item;
    }

    public void removeItem(T item)
    {
        items[Array.IndexOf(items, item)] = items[items.Count() - 1];
        Array.Resize(ref items, items.Count() -1);
    }

    public IEnumerable<T> getItems()
    {
        return items;
    }
}
于 2013-02-25T09:30:38.630 回答
0

一个简单的集合并不难实现,但您需要执行以下操作:

保存数据的数组。使用泛型,它可能类似于private T[] data = new T[10];.
这当然会将大小限制为 10,但这可以更改:-)

通用方法。就像是public T GetItem(int index){...}

此外,如果您知道如何操作,拥有一个索引器可能会很棒。你可以用谷歌搜索:-)

于 2013-02-25T09:07:18.073 回答
0

您需要linked list在 C# 中实现 a 。

看看这个: http ://csharp-algos.blogspot.com/2010/09/blog-post.html

这是在没有任何 .NET 库的情况下执行此操作的标准方法

于 2013-02-25T09:09:28.457 回答