C #의 배열에서 요소를 삭제하는 방법
이 배열이 있다고 가정 해 봅시다.
int[] numbers = {1, 3, 4, 9, 2};
"이름"으로 요소를 어떻게 삭제합니까? 4 번이라고 해?
심지어 ArrayList
삭제하는 데 도움이되지 않았다?
string strNumbers = " 1, 3, 4, 9, 2";
ArrayList numbers = new ArrayList(strNumbers.Split(new char[] { ',' }));
numbers.RemoveAt(numbers.IndexOf(4));
foreach (var n in numbers)
{
Response.Write(n);
}
색인을 몰라도 4의 모든 인스턴스를 제거하려면 다음을 수행하십시오.
LINQ : (.NET Framework 3.5)
int[] numbers = { 1, 3, 4, 9, 2 };
int numToRemove = 4;
numbers = numbers.Where(val => val != numToRemove).ToArray();
비 LINQ : (.NET Framework 2.0)
static bool isNotFour(int n)
{
return n != 4;
}
int[] numbers = { 1, 3, 4, 9, 2 };
numbers = Array.FindAll(numbers, isNotFour).ToArray();
첫 번째 인스턴스 만 제거하려면 다음을 수행하십시오.
LINQ : (.NET Framework 3.5)
int[] numbers = { 1, 3, 4, 9, 2, 4 };
int numToRemove = 4;
int numIndex = Array.IndexOf(numbers, numToRemove);
numbers = numbers.Where((val, idx) => idx != numIndex).ToArray();
비 LINQ : (.NET Framework 2.0)
int[] numbers = { 1, 3, 4, 9, 2, 4 };
int numToRemove = 4;
int numIdx = Array.IndexOf(numbers, numToRemove);
List<int> tmp = new List<int>(numbers);
tmp.RemoveAt(numIdx);
numbers = tmp.ToArray();
편집 : Malfist가 지적했듯이 LINQ 코드 예제가 작동하려면 .NET Framework 3.5를 대상으로 지정해야합니다. 2.0을 대상으로하는 경우 비 LINQ 예제를 참조해야합니다.
int[] numbers = { 1, 3, 4, 9, 2 };
numbers = numbers.Except(new int[]{4}).ToArray();
배열을 목록으로 변환하고 목록에서 remove를 호출 할 수도 있습니다. 그런 다음 배열로 다시 변환 할 수 있습니다.
int[] numbers = {1, 3, 4, 9, 2};
var numbersList = numbers.ToList();
numbersList.Remove(4);
질문에 작성된 코드에는 버그가 있습니다.
arraylist에 "1" "3" "4" "9"및 "2"문자열이 포함됩니다 (공백 참조).
따라서 IndexOf (4)는 4가 int이기 때문에 아무것도 찾지 못하며 "tostring"조차도 "4"가 아닌 "4"로 변환하고 아무것도 제거되지 않습니다.
arraylist는 원하는 것을 수행하는 올바른 방법입니다.
요소의 모든 인스턴스를 제거하려면 Balabaster의 대답이 정확합니다. 첫 번째 것만 제거하려면 다음과 같이하십시오.
int[] numbers = { 1, 3, 4, 9, 2, 4 };
int numToRemove = 4;
int firstFoundIndex = Array.IndexOf(numbers, numToRemove);
if (numbers >= 0)
{
numbers = numbers.Take(firstFoundIndex).Concat(numbers.Skip(firstFoundIndex + 1)).ToArray();
}
크기 조정을 처리해야하므로 배열 자체에서 제거하는 것은 간단하지 않습니다. 이것은 List<int>
대신에 비슷한 것을 사용하는 큰 장점 중 하나입니다 . 그것은 제공 Remove
/ RemoveAt
2.0 및 3.0 LINQ 확장의 많은.
가능하면 리팩터링하여 List<>
또는 유사한 것을 사용하십시오 .
I posted my solution here.
This is a way to delete an array element without copying to another array - just in frame of the same array instance:
public static void RemoveAt<T>(ref T[] arr, int index)
{
for (int a = index; a < arr.Length - 1; a++)
{
// moving elements downwards, to fill the gap at [index]
arr[a] = arr[a + 1];
}
// finally, let's decrement Array's size by one
Array.Resize(ref arr, arr.Length - 1);
}
As a generic extension, 2.0-compatible:
using System.Collections.Generic;
public static class Extensions {
//=========================================================================
// Removes all instances of [itemToRemove] from array [original]
// Returns the new array, without modifying [original] directly
// .Net2.0-compatible
public static T[] RemoveFromArray<T> (this T[] original, T itemToRemove) {
int numIdx = System.Array.IndexOf(original, itemToRemove);
if (numIdx == -1) return original;
List<T> tmp = new List<T>(original);
tmp.RemoveAt(numIdx);
return tmp.ToArray();
}
}
Usage:
int[] numbers = {1, 3, 4, 9, 2};
numbers = numbers.RemoveFromArray(4);
' To remove items from string based on Dictionary key values. ' VB.net code
Dim stringArr As String() = "file1,file2,file3,file4,file5,file6".Split(","c)
Dim test As Dictionary(Of String, String) = New Dictionary(Of String, String)
test.Add("file3", "description")
test.Add("file5", "description")
stringArr = stringArr.Except(test.Keys).ToArray()
You can do in this way:
int[] numbers= {1,3,4,9,2};
List<int> lst_numbers = new List<int>(numbers);
int required_number = 4;
int i = 0;
foreach (int number in lst_numbers)
{
if(number == required_number)
{
break;
}
i++;
}
lst_numbers.RemoveAt(i);
numbers = lst_numbers.ToArray();
참고URL : https://stackoverflow.com/questions/496896/how-to-delete-an-element-from-an-array-in-c-sharp
'IT story' 카테고리의 다른 글
두 날짜 사이의 일 수를 센다 (0) | 2020.06.23 |
---|---|
Spark SQL의 DataFrame에서 열 유형을 변경하는 방법은 무엇입니까? (0) | 2020.06.23 |
Rails 3.2, FATAL : 사용자에 대한 피어 인증 실패 (PG :: Error) (0) | 2020.06.23 |
UICollectionViewCell의 콘센트가 왜없는가요? (0) | 2020.06.23 |
URL에서 매개 변수 검색 (0) | 2020.06.23 |