2010-08-05 3 views
4

문자열 목록이 있습니다. 해당 목록의 각 문자열에 대해 다른 문자열 앞에 붙이고 싶습니다. 나는 그것을하기위한 방법을 썼지 만, .NET에 이미 뭔가가 있는지 궁금해했다. 그것은 내장 될 수있는 것 같지만 아무것도 찾을 수 없었습니다. 여기 VB.NET : 문자열 목록의 모든 문자열 앞에 문자열을 추가하십시오. 이 작업을 수행하는 기존 방법이 있습니까?

내가 쓴 방법 :

Private Function PrependToAllInList(ByRef inputList As List(Of String), ByRef prependString As String) As List(Of String) 
    Dim returnList As List(Of String) = New List(Of String) 
    For Each inputString As String In inputList 
     returnList.Add(String.Format("{0}{1}", prependString, inputString)) 
    Next 
    Return returnList 
End Function 

그것은 작동하지만, 차라리 때마다 기능이 가능한 내장 사용할 수 있습니다. 당신의 도움을 주셔서 감사합니다. 당신은 LINQ (.NET 3.5 이상)를 사용할 수있는 경우

+1

이동 한 깨끗 코드를 유지하고 얻을 예민한 것 같은

그래서 대신

String.Format("{0}{1}", prependString, inputString) 

당신은 그냥 ...

String.Concat(prependString, inputString) 

를 둘 수 있었다 그 다음 작업으로! * grins * –

+0

코드에서 리팩터링하는 데 걸리는 시간을 모두 낭비하고 싶지는 않지만 개발자가 "이 작업을 수행하는 더 좋은 방법이 있어야합니다"라고 말한 다음 찾기를 원할 때 좋은 신호라고 생각합니다. 아웃. 이것이 습관이되면 더 나은 개발자가 될 것입니다. –

+0

난 그냥 일부 코드를 리팩토링하려고하고있다. :) 그 방법을 사용하는 것에 대해 뭔가 옳지 않은 것처럼 보였습니다. – Jeremy

답변

6

, 당신은 당신을 위해 일을하는 간단한 LINQ 쿼리를 사용할 수 있습니다

기본적으로
Dim qry = stringList.Select(Function(s) "prepend this " & s) 
Dim returnList = qry.ToList() 

, Select()IEnumerable(Of String)를 반환합니다, 어떤 일을해야한다 . 컬렉션이 실제로 목록으로 필요하면 .ToList() 명령을 포함 할 수 있습니다. 그러나 컬렉션 (예 : For Each s As String in qry) 만 반복 할 계획이면 목록으로 다시 전환하는 비용을 들이지 않아도됩니다.

+0

위대한 작품. 감사! 나는 전에 LINQ를 사용하지 않았기 때문에 거기를 보려고 생각하지 않았습니다. – Jeremy

+0

@ 제레미 린크 (Jeremy LINQ)는 훌륭합니다! 'For Each' 루프를 사용할 때마다 언제나'LINQ'를 사용할 수 있습니다.[101 LINQ Samples] (http://msdn.microsoft.com/en-us/vbasic/bb688088.aspx)를 확인하십시오. –

+0

링크를 제공해 주셔서 감사합니다. – Jeremy

0
returnList = strlistList.Aggregate(New List(Of String), _ 
       Function(list, s) list.Add("prepend this " & s)) 

나는 미리 정의 된 매핑 건너 적이 없다,

0

가 무슨 소리하는 매핑 기능입니다 (나는 C#을 음식물, 그래서 내가 구문에 대해 잘 모르겠어요, 주) 함수는 vb.net에서하지만, 당신이 가지고 있거나 람다 표현식, 위임자 또는 LINQ를 사용하는 방식으로이 작업을 수행 할 수 있습니다.

가 이것의 기쁨은 .NET 2.0 일 것입니다 http://www.panopticoncentral.net/archive/2006/12/08/18587.aspx

에서이 목적을 위해 대표의 사용에 여기 좋은 블로그 게시물 -하지만 그것은 사용할 수 있습니다 LINQ만큼 우아한 아니다 3.5 이상 ...

inputList.Select(Function(s) String.Format("{0}{1}", pre, s).ToList(); 
0

String.Format 대신 String.Insert를 사용하여 예상 한 것과 더 가깝게 만들 수 있습니다. 여담으로

String.Insert

0

, 당신은 오히려 및 String.format보다 두 문자열을 연결하는 string.concat를 사용할 수 있습니다. 당신이 가능 :) 그와

+0

String.Concat의 팁 주셔서 감사합니다. – Jeremy

관련 문제