# List<T>.RemoveAt(Int32) 메서드

## 정의

List<T>의 지정된 인덱스에 있는 요소를 제거합니다.Removes the element at the specified index of the List<T>.

``````public:
virtual void RemoveAt(int index);``````
``public void RemoveAt (int index);``
``````abstract member RemoveAt : int -> unit
override this.RemoveAt : int -> unit``````
``Public Sub RemoveAt (index As Integer)``

#### 매개 변수

index
Int32

제거할 요소의 인덱스(0부터 시작)입니다.The zero-based index of the element to remove.

#### 예외

`index` 가 0보다 작습니다.`index` is less than 0.

또는-or- `index`Count보다 크거나 같은 경우`index` is equal to or greater than Count.

## 예제

다음 예에서는에서 간단한 비즈니스 개체를 추가, 제거 및 삽입 하는 방법을 보여 줍니다 List<T> .The following example demonstrates how to add, remove, and insert a simple business object in a List<T>.

``````using System;
using System.Collections.Generic;
// Simple business object. A PartId is used to identify the type of part
// but the part name can change.
public class Part : IEquatable<Part>
{
public string PartName { get; set; }

public int PartId { get; set; }

public override string ToString()
{
return "ID: " + PartId + "   Name: " + PartName;
}
public override bool Equals(object obj)
{
if (obj == null) return false;
Part objAsPart = obj as Part;
if (objAsPart == null) return false;
else return Equals(objAsPart);
}
public override int GetHashCode()
{
return PartId;
}
public bool Equals(Part other)
{
if (other == null) return false;
return (this.PartId.Equals(other.PartId));
}
// Should also override == and != operators.
}
public class Example
{
public static void Main()
{
// Create a list of parts.
List<Part> parts = new List<Part>();

// Add parts to the list.
parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
parts.Add(new Part() { PartName = "shift lever", PartId = 1634 });

// Write out the parts in the list. This will call the overridden ToString method
// in the Part class.
Console.WriteLine();
foreach (Part aPart in parts)
{
Console.WriteLine(aPart);
}

// Check the list for part #1734. This calls the IEquatable.Equals method
// of the Part class, which checks the PartId for equality.
Console.WriteLine("\nContains(\"1734\"): {0}",
parts.Contains(new Part {PartId=1734, PartName="" }));

// Insert a new item at position 2.
Console.WriteLine("\nInsert(2, \"1834\")");
parts.Insert(2, new Part() { PartName = "brake lever", PartId = 1834 });

//Console.WriteLine();
foreach (Part aPart in parts)
{
Console.WriteLine(aPart);
}

Console.WriteLine("\nParts[3]: {0}", parts[3]);

Console.WriteLine("\nRemove(\"1534\")");

// This will remove part 1534 even though the PartName is different,
// because the Equals method only checks PartId for equality.
parts.Remove(new Part(){PartId=1534, PartName="cogs"});

Console.WriteLine();
foreach (Part aPart in parts)
{
Console.WriteLine(aPart);
}
Console.WriteLine("\nRemoveAt(3)");
// This will remove the part at index 3.
parts.RemoveAt(3);

Console.WriteLine();
foreach (Part aPart in parts)
{
Console.WriteLine(aPart);
}

/*

ID: 1234   Name: crank arm
ID: 1334   Name: chain ring
ID: 1434   Name: regular seat
ID: 1444   Name: banana seat
ID: 1534   Name: cassette
ID: 1634   Name: shift lever

Contains("1734"): False

Insert(2, "1834")
ID: 1234   Name: crank arm
ID: 1334   Name: chain ring
ID: 1834   Name: brake lever
ID: 1434   Name: regular seat
ID: 1444   Name: banana seat
ID: 1534   Name: cassette
ID: 1634   Name: shift lever

Parts[3]: ID: 1434   Name: regular seat

Remove("1534")

ID: 1234   Name: crank arm
ID: 1334   Name: chain ring
ID: 1834   Name: brake lever
ID: 1434   Name: regular seat
ID: 1444   Name: banana seat
ID: 1634   Name: shift lever

RemoveAt(3)

ID: 1234   Name: crank arm
ID: 1334   Name: chain ring
ID: 1834   Name: brake lever
ID: 1444   Name: banana seat
ID: 1634   Name: shift lever

*/
}
}
``````
``````Imports System.Collections.Generic

' Simple business object. A PartId is used to identify the type of part
' but the part name can change.
Public Class Part
Implements IEquatable(Of Part)
Public Property PartName() As String
Get
Return m_PartName
End Get
Set(value As String)
m_PartName = Value
End Set
End Property
Private m_PartName As String

Public Property PartId() As Integer
Get
Return m_PartId
End Get
Set(value As Integer)
m_PartId = Value
End Set
End Property
Private m_PartId As Integer

Public Overrides Function ToString() As String
Return "ID: " & PartId & "   Name: " & PartName
End Function
Public Overrides Function Equals(obj As Object) As Boolean
If obj Is Nothing Then
Return False
End If
Dim objAsPart As Part = TryCast(obj, Part)
If objAsPart Is Nothing Then
Return False
Else
Return Equals(objAsPart)
End If
End Function
Public Overrides Function GetHashCode() As Integer
Return PartId
End Function
Public Overloads Function Equals(other As Part) As Boolean _
Implements IEquatable(Of Part).Equals
If other Is Nothing Then
Return False
End If
Return (Me.PartId.Equals(other.PartId))
End Function
' Should also override == and != operators.

End Class
Public Class Example
Public Shared Sub Main()
' Create a list of parts.
Dim parts As New List(Of Part)()

' Add parts to the list.
.PartName = "crank arm", _
.PartId = 1234 _
})
.PartName = "chain ring", _
.PartId = 1334 _
})
.PartName = "regular seat", _
.PartId = 1434 _
})
.PartName = "banana seat", _
.PartId = 1444 _
})
.PartName = "cassette", _
.PartId = 1534 _
})
.PartName = "shift lever", _
.PartId = 1634 _
})

' Write out the parts in the list. This will call the overridden ToString method
' in the Part class.
Console.WriteLine()
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next

' Check the list for part #1734. This calls the IEquatable.Equals method
' of the Part class, which checks the PartId for equality.
Console.WriteLine(vbLf & "Contains(""1734""): {0}", parts.Contains(New Part() With { _
.PartId = 1734, _
.PartName = "" _
}))

' Insert a new item at position 2.
Console.WriteLine(vbLf & "Insert(2, ""1834"")")
parts.Insert(2, New Part() With { _
.PartName = "brake lever", _
.PartId = 1834 _
})

'Console.WriteLine();
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next

Console.WriteLine(vbLf & "Parts[3]: {0}", parts(3))

Console.WriteLine(vbLf & "Remove(""1534"")")

' This will remove part 1534 even though the PartName is different,
' because the Equals method only checks PartId for equality.
parts.Remove(New Part() With { _
.PartId = 1534, _
.PartName = "cogs" _
})

Console.WriteLine()
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next

Console.WriteLine(vbLf & "RemoveAt(3)")
' This will remove part at index 3.
parts.RemoveAt(3)

Console.WriteLine()
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next
End Sub
'
'        This example code produces the following output:
'        ID: 1234   Name: crank arm
'        ID: 1334   Name: chain ring
'        ID: 1434   Name: regular seat
'        ID: 1444   Name: banana seat
'        ID: 1534   Name: cassette
'        ID: 1634   Name: shift lever
'
'        Contains("1734"): False
'
'        Insert(2, "1834")
'        ID: 1234   Name: crank arm
'        ID: 1334   Name: chain ring
'        ID: 1834   Name: brake lever
'        ID: 1434   Name: regular seat
'        ID: 1444   Name: banana seat
'        ID: 1534   Name: cassette
'        ID: 1634   Name: shift lever
'
'        Parts[3]: ID: 1434   Name: regular seat
'
'        Remove("1534")
'
'        ID: 1234   Name: crank arm
'        ID: 1334   Name: chain ring
'        ID: 1834   Name: brake lever
'        ID: 1434   Name: regular seat
'        ID: 1444   Name: banana seat
'        ID: 1634   Name: shift lever
'   '
'        RemoveAt(3)
'
'        ID: 1234   Name: crank arm
'        ID: 1334   Name: chain ring
'        ID: 1834   Name: brake lever
'        ID: 1444   Name: banana seat
'        ID: 1634   Name: shift lever
'

End Class
``````
``````
// Simple business object. A PartId is used to identify the type of part
// but the part name can change.
[<CustomEquality; NoComparison>]
type Part = { PartId : int ; mutable PartName : string } with
override this.GetHashCode() = hash this.PartId
override this.Equals(other) =
match other with
| :? Part as p -> this.PartId = p.PartId
| _ -> false
override this.ToString() = sprintf "ID: %i   Name: %s" this.PartId this.PartName

[<EntryPoint>]
let main argv =
// We refer to System.Collections.Generic.List<'T> by its type
// abbreviation ResizeArray<'T> to avoid conflicts with the F# List module.
// Note: In F# code, F# linked lists are usually preferred over
// ResizeArray<'T> when an extendable collection is required.
let parts = ResizeArray<_>()
parts.Add({PartName = "crank arm" ; PartId = 1234})
parts.Add({PartName = "chain ring"; PartId = 1334 })
parts.Add({PartName = "regular seat"; PartId = 1434 })
parts.Add({PartName = "banana seat"; PartId = 1444 })
parts.Add({PartName = "cassette"; PartId = 1534 })
parts.Add({PartName = "shift lever"; PartId = 1634 })

// Write out the parts in the ResizeArray.  This will call the overridden ToString method
// in the Part type
printfn ""
parts |> Seq.iter (fun p -> printfn "%O" p)

// Check the ResizeArray for part #1734. This calls the IEquatable.Equals method
// of the Part type, which checks the PartId for equality.
printfn "\nContains(\"1734\"): %b" (parts.Contains({PartId=1734; PartName=""}))

// Insert a new item at position 2.
printfn "\nInsert(2, \"1834\")"
parts.Insert(2, { PartName = "brake lever"; PartId = 1834 })

// Write out all parts
parts |> Seq.iter (fun p -> printfn "%O" p)

printfn "\nParts[3]: %O" parts.[3]

printfn "\nRemove(\"1534\")"
// This will remove part 1534 even though the PartName is different,
// because the Equals method only checks PartId for equality.
// Since Remove returns true or false, we need to ignore the result
parts.Remove({PartId=1534; PartName="cogs"}) |> ignore

// Write out all parts
printfn ""
parts |> Seq.iter (fun p -> printfn "%O" p)

printfn "\nRemoveAt(3)"
// This will remove the part at index 3.
parts.RemoveAt(3)

// Write out all parts
printfn ""
parts |> Seq.iter (fun p -> printfn "%O" p)

0 // return an integer exit code
``````

## 설명

RemoveAt를 호출 하 여 항목을 제거 하면 제거 된 항목을 대체 하기 위해 목록의 나머지 항목이 다시 매겨집니다.When you call RemoveAt to remove an item, the remaining items in the list are renumbered to replace the removed item. 예를 들어 인덱스 3에서 항목을 제거 하면 인덱스 4의 항목이 3 위치로 이동 합니다.For example, if you remove the item at index 3, the item at index 4 is moved to the 3 position. 또한 목록에 있는 항목 수 (속성으로 표시 됨 Count )는 1로 줄어듭니다.In addition, the number of items in the list (as represented by the Count property) is reduced by 1.

이 메서드는 O (n) 연산입니다. 여기서 n 은 ( Count - `index` )입니다.This method is an O(n) operation, where n is (Count - `index`).