在c#中创建自己的集合类

时间:2013-02-25 09:04:24

标签: c# collections

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

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

public class myList
{
    public void addItem()
    {

    }

    public void removeItem()
    {

    }
}

现在,我很遗憾,接下来该怎么做?

5 个答案:

答案 0 :(得分: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

祝你好运!

答案 1 :(得分:1)

您需要将“List”中的项目存储在数组(类的私有成员)中。

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

答案 2 :(得分: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;
    }
}

答案 3 :(得分:0)

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

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

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

这样的东西

另外,如果你知道怎么做,那么拥有一个索引器可能会很棒。你可以谷歌: - )

答案 4 :(得分:0)

您需要在C#中实现linked list

检查一下: http://csharp-algos.blogspot.com/2010/09/blog-post.html

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