2014-12-15 11 views
2

동적 문자열 배열이 있고 ReDim 등을 사용하여 동적 값을 채 웁니다. 문자열 배열에서 특정 위치의 항목을 삭제하고 싶습니다. System.Linq를 사용하여 Where 조건을 사용하는 것에 대해 읽었지만 실제로 이에 대한 적절한 대답을 얻을 수는 없습니다. 어떤 제안?동적 문자열 배열에서 특정 인덱스의 항목 제거

Dim dynamic() as String 
... 
Redim dynamic(2) 
.. 
dynamic(0) = Apple 
dynamic(1) = Banana 
dynamic(2) = Orange 
.. 

dynamic(i).Remove... etc? 
+0

배열에서 항목을 제거 할 수 없습니다. 새 배열을 만들고 원하지 않는 색인 복사를 건너 뛰어야합니다. –

+3

배열의 List (of String) instad를 사용하면 LINQ – Plutonix

답변

3

다른 사람들이 언급했듯이 기술적으로는 배열에서 요소를 제거 할 방법이 없습니다. 배열의 요소 수를 수정하는 유일한 방법은 완전히 새로운 배열을 만들고 그 배열의 내용을 다른 배열로 복사하는 것입니다. 당신이 할 수있는 더 편리한 방법이 있지만, 결국 그것은 그들이 당신을 위해 실제로하고있는 것입니다. 바로 뒤에 있습니다.

이런 종류의 작업을 많이 수행하려는 경우 String 배열이 아닌 List(Of String) 클래스를 사용하는 것이 좋습니다. 다른 사람들이 지적했듯이 List(Of T) 클래스는 이러한 종류의 동적 함수를보다 단순하게 만들기 위해 특별히 설계되었습니다. , 당신이 이제까지 배열로 목록이 필요하면, 당신은 아주 쉽게 (효율적)이 같은 배열로 변환 할 수 있습니다 :

Dim myList As New List(Of String)() 
myList.Add("Apple") 
myList.Add("Banana") 
myList.Add("Orange") 
myList.RemoveAt(1) 
Dim myArray() As String = myList.ToArray() 

을하지만, 당신이 정말로 배열로 있어야하는 경우, LINQ는 그것을 확인하지 조금 더 쉬워. LINQ 네임 스페이스를 가져옴으로써 많은 새로운 LINQ 확장 메서드가 배열 (및 기타 목록 또는 열거 가능한 개체)에 추가됩니다. 예를 들어, 다음과 같이 LINQ의 Except 방법을 사용할 수 있습니다

Dim dynamic() As String = {"Apple", "Banana", "Orange"} 
dynamic = dynamic.Except({"Banana"}).ToArray() 

Except 방법이 열거 객체를 반환 것을 알 수 있지만 배열을. 배열로 변환하려면 위의 예제와 같이 LINQ의 ToArray 메서드를 추가로 호출해야합니다. 위의 예에서는 배열 중간에서 "Banana" 문자열을 제거합니다. 그러나 값을 알지 못하고 인덱스로 제거하려는 경우 LINQ는 이와 같은 인덱스로 필터링하는 방법을 제공하지 않습니다. 당신은 여전히하지만,이 같은 Except 방법을 사용할 수 있습니다 : 나는 Except 메서드에 전달 된 매개 변수 주위에 중괄호를 넣어 왜 당신이 궁금 할

Dim dynamic() As String = {"Apple", "Banana", "Orange"} 
dynamic = dynamic.Except({dynamic(1)}).ToArray() 

. Except 메서드가 실제로 매개 변수 목록 (특정하려면 IEnumerable)을 사용하므로이 작업을 수행했습니다. 배열의 IEnumerable (물론 덧붙여 IList)을 구현하고 있기 때문에 메서드에 전달하기 전에 배열의 매개 변수를 래핑했습니다. 흥미로운 사실은 제거 할 항목이 여러 개인 경우 다음과 같이 한 명령에서 모두 수행 할 수 있다는 것입니다.

Dim dynamic() As String = {"Apple", "Banana", "Orange"} 
dynamic = dynamic.Except({"Apple", "Banana"}).ToArray() 
+0

그것은 실제로 매우 도움이됩니다. 시도 해보려합니다. 답변 해주셔서 감사합니다. – Neophile

1

배열을 사용하여 직접 수행 할 수 없습니다. 그러나 당신은 이것을 할 수 있습니다 :

Dim tmp = New List(Of string)(dynamic) 
tmp.RemoveAt(index) 
dynamic = tmp.ToArray() 
+0

을 사용할 수 있습니다. 시도해 볼게요. 다시 연락 드리겠습니다. – Neophile