-1

文字列DadmamJuniorRichardのリストがあります。たとえば、インデックスが2の Junior をリストから削除します。リチャードの指数は 2 になるのか、それとも 2 位に差をつけて 3 のままなのか。

助けてくれてありがとう

4

6 に答える 6

5

たとえば、インデックスが2のJuniorをリストから削除するとします。リチャードのインデックスは2になりますか、それとも2番目の位置にギャップがある3のままですか?

2になります。隙間はありません。また、要素を追加すると、この要素がリストの最後に追加されます。

ちなみに、おいおい、これを確認するのはとても難しいですか?コンパイラなどにアクセスできないということですか?

using System;
using System.Linq;

public class Program
{
    static void Main()
    {
        var list = new[] { "Dad", "mam", "Junior", "Richard" }.ToList();
        list.RemoveAt(2);
        Console.WriteLine(list[2]);
    }
}

プリント:

Richard
于 2012-08-14T16:47:01.740 に答える
4

ギャップなし。ギャップが必要な場合は、その位置の値をnull自分で置き換えます。

ほとんどの場合、隙間ができたくないので、きれいに保たれていることに満足できます。

ただし、実際的な結果の 1 つは、同じ操作で多くの項目を削除する場合、削除しないものだけを含む新しいリストを作成する方が高速であることに気付く場合があります (各操作の後に内部的に物事を移動するため)。削除する)。

ただし、それが価値があるためには、多くのことが必要です。最初にそのアプローチに飛びつくのではなく、大きな遅延に遭遇した場合は覚えておいてください。

于 2012-08-14T16:52:06.897 に答える
2

ギャップはありません。編集済みリストには3つのアイテムしか含まれておらず、インデックスは、、0です。12

于 2012-08-14T16:46:54.913 に答える
2

レギュラーList<T>はソートされたリストではありません。

[追加]を使用して最後に追加すると、現在のアイテムはそのまま残り、新しいアイテムがリストの最後に追加されます。現在のアイテムのインデックスは変更されません。

[挿入]を使用してリストの中央にアイテムを挿入すると、インデックスは挿入ポイントを超えて上にシフトします。

同様に、アイテムを削除すると、そのアイテムの上のリスト要素のインデックスが下にシフトします。

インデックスの番号付けにギャップはありません。インデックスは常に0から始まり、リストの長さより1つ短くなります。

于 2012-08-14T16:46:59.033 に答える
2

Removeメソッドを使用すると、はい、Richardのインデックスは2になります。削除した要素は文字通りリストから削除されるため、インデックスが更新されます。

Addメソッドを使用すると、アイテムがリストの最後に追加されるため、他のすべての要素のインデックスは変更されません。

于 2012-08-14T16:47:06.277 に答える
2

リストのインデックスは常にリスト内のアイテムの位置です。ギャップはあり得ますし、決してありません。さらに、Countは常にリスト内のアイテムの数を返し、アイテムのインデックスは常に0から。になりますCount-1

于 2012-08-14T16:47:41.793 に答える