-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 ずつ増やしたいと思うでしょう。次に、より大きなサイズの新しい配列を宣言し、元の項目をそこにコピーします。新しいアイテムを最後にコピーします。
  • sort メソッドも必要になる場合がありますが、これは、配列に格納されるオブジェクトの複雑さに完全に依存します。
  • アイテムを削除するときに配列のサイズを減らす必要はないかもしれませんが、アイテムの数などを数える必要があるかもしれません。アイテムが削除されるたびに配列のサイズを減らさない場合は、必ずアイテムを追加するときは、これを考慮してください (すでに十分な大きさになっている可能性があるため)。
  • 配列内の項目の数を返す count() メソッドを作成します。項目を削除するときに配列のサイズを縮小しない場合は、これを使用して null 値をチェックします。

他にも考慮すべき点が山ほどありますが、特にジェネリックを使用して複数の型を格納できるようにすることは重要です。このトピックについて少し読むことをお勧めします: http://msdn.microsoft.com/en-gb/library/512aeb7t.aspx

幸運を!

于 2013-02-25T09:19:18.740 に答える
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 に答える
1

「リスト」の項目を配列 (クラスのプライベート メンバー) に格納する必要があります。

問題は、配列のサイズが固定されていることです (項目を単純に追加することはできません)。そのため、初期サイズを指定し、それがどの程度「いっぱい」であるかを覚えておく必要があります。より多くのスペースが必要な場合は、新しいより大きな配列を作成し、元の配列からアイテムをコピーする必要があります。

于 2013-02-25T09:11:05.603 に答える
0

単純なコレクションの実装はそれほど難しくありませんが、次のことを行う必要があります。

データを保持する配列。ジェネリックを使用すると、次のようになりprivate T[] data = new T[10];ます。
もちろん、これはサイズを10に制限しますが、これは変更できます:-)

ジェネリック メソッド。何かのようなものpublic T GetItem(int index){...}

また、方法を知っている場合は、インデクサーがあると便利です。あなたはそれをグーグルすることができます:-)

于 2013-02-25T09:07:18.073 に答える
0

linked listC# でa を実装する必要があります。

これをチェックしてください: http://csharp-algos.blogspot.com/2010/09/blog-post.html

これは、.NET ライブラリを使用せずにこれを行う標準的な方法です。

于 2013-02-25T09:09:28.457 に答える