0

在庫システムを作成していますが、どれを使用できるか思い出せません。

私はマウスを持っていてlist<item>inventory<item> ボタンがクリックされた場合、アイテムをインベントリから削除してマウスに移動したいのですが (私はこれを実行しました)、どこかに戻すのが問題です。

そこにまだアイテムがない場合は簡単です...つまり、挿入を使用するだけですが、そこにアイテムがある場合はどうすればよいですか? それをマウスリストに追加してからその位置に挿入するか、古いリスト項目をリストの最初または最後または次の項目に挿入しますか? または、別の方法はありますか?

基本的に、ボタンをクリックして、そこにあるアイテムを削除し、マウスリストにあるアイテムに入れます。マウスリストに何かが既にある場合は、古いアイテムがあった場所にそれを追加します。

リストで挿入がどのように機能するのか疑問に思っています。

インデックス 2 に挿入すると、そのインデックスに既にあるオブジェクト/アイテムはどうなりますか? 既に存在するオブジェクト/アイテムは上に移動してインデックス 3 になるか、削除されますか?

リストから何かを削除すると、そのインデックスは になりnullますか? 、つまり、このようにindex 0 = 2 index 1 = 51 index 2 = 213 index 3 = null index 4 =234たとえば、またはindex 4はindex 3になりますか?

4

2 に答える 2

0

見てみましょう

static void Main(string[] args)
{
    var names = new List<string> { "Homer", "Marge", "Lisa" };

    Show(names);

    names.Insert(1, "Bart");
    Console.WriteLine("Inserted Bart at 1");

    Show(names);

    names.RemoveAt(0);
    Console.WriteLine("Removed Homer");
    Show(names);
}

private static void Show(List<string> names)
{
    Console.WriteLine("Names");
    for (int i = 0; i < names.Count; i++)
        Console.WriteLine("\t{0}: {1}", i, names[i]);
}

私たちに与えます。。。

名前
0:ホーマー
1:マージ
2:リサ
は1でバートを挿入しました
名前
0:ホーマー
1:バート
2:マージ
3:リサはホーマー の名前を
削除しました 0:バート 1:マージ 2:リサ



それで。

  1. 2番目の位置に追加すると、前の2番目のアイテムが3番目のアイテムに移動します(その下のすべてのものも1つ下に押します)
  2. アイテムを削除すると、すべてが1つ上に移動します

科学的方法は、これらのような質問に役立ちます(つまり、理論、実験、観察、必要に応じて繰り返す)

これはあなたの質問に答えますか?

于 2013-03-01T11:42:47.597 に答える
0

リストは舞台裏の配列です (Reflector のような IL 逆アセンブラーを使用すると、これを確認できます)。

そうは言っても、リストからアイテムを削除List<T>すると、削除されたものを除くすべてのアイテムを持つソース配列から内部的に新しい配列が作成されます。

一方、リストにアイテムを挿入すると、インデックス全体のアイテムが置き換えられ、インデックスから下のすべてが 1 つ下に移動します (BinaryWorrier のおかげです)。インデックスにあったオブジェクトは「破棄」されません。リストからオブジェクト参照を削除しています。

于 2013-03-01T11:42:10.137 に答える