ArrayList에서 쉼표로 구분 된 문자열을 어떻게 생성합니까?


82

디버그 로그에 출력하기 위해 쉼표로 구분 된 목록으로 뱉어 내려는 처리 스크립트에 ID의 ArrayList를 저장하고 있습니다. 반복하지 않고 쉽게 얻을 수있는 방법이 있습니까?

편집 : .net 2.0 이상에서 사용할 수있는 List (Of T)를 지적한 Joel에게 감사드립니다. 그것은 당신이 그것을 사용할 수 있다면 일을 더 쉽게 만듭니다.


나는 ArrayList를 사용하고 있기 때문에 .Net 1.0 또는 .Net 1.1을 사용하고 있다고 가정합니다.
kͩeͣmͮpͥ ͩ

답변:


156

예, 저는 제 질문에 답하고 있지만 아직 여기에서 찾지 못했고 이것이 다소 매끄러운 것이라고 생각했습니다.

... VB.NET에서 :

String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))

... C #에서

string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))

이것들에 대한 유일한 "가득한 점"은 변환이 제대로 이루어 지도록 Option Strict를 사용하는 경우 ArrayList에 문자열로 저장된 항목이 있어야한다는 것입니다.

편집 : .net 2.0 이상을 사용하는 경우 List (Of String) 유형 개체를 만들고 필요한 것을 얻을 수 있습니다. 이 문제를 제기 한 Joel에게 감사드립니다!

String.Join(",", TargetList.ToArray())

2
다른 "잘못"이 있습니다. 하나는이 솔루션이 목록을 직접 반복하는 것만 큼 관용적이지 않다는 것입니다. 둘째, ToArray가 컬렉션을 순회하고 Join도 순회하는 경우 간단한 foreach 루프의 두 배가 걸립니다.
Bill the Lizard

물론 System.Collections.Specialized.StringCollection을 사용할 가능성은 항상 있습니다.
ICR

대신 List <string> 사용을 고려할 수 있다면 내장 ToArray () 메서드가 있고 유형 문제를 제거합니다. BTW-typeof (string)이 Type.GetType ( "System.String")보다 선호됩니다.
Jon B

17

지금까지의 솔루션은 모두 매우 복잡합니다. 관용적 해결책은 의심 할 여지없이 다음과 같아야합니다.

String.Join(",", x.Cast(Of String)().ToArray())

새로운 프레임 워크 버전에서는 멋진 곡예가 필요하지 않습니다. 그다지 현대적이지 않은 버전을 가정하면 다음이 가장 쉬울 것입니다.

Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))

mspmsp의 두 번째 솔루션도 좋은 접근 방식이지만 AddressOf키워드가 누락되어 작동하지 않습니다 . 또한 Convert.ToString다소 비효율적이며 (불필요한 내부 평가가 많음) Convert일반적으로 클래스가 매우 깔끔하게 설계되지 않았습니다. 특히 완전히 중복되기 때문에 피하는 경향이 있습니다.


CType과 CStr은 기본적으로 Convert 클래스를 호출하지 않습니까?
Joel Coehoorn

@Echostorm : 나는 그것을 어디에서 말합니까? @Joel : 전혀 요. 대부분의 경우, MS.VB.CS.Conversions.ToString간단한 ToString호출이 되는 도우미 함수를 호출합니다. 그러나이 방법조차도 직접 y 라고 부르지 않을 것입니다 (VB 캐스트 연산자를 통하는 것과는 반대로).
Konrad Rudolph

16

다음과 같은 것 :

String.Join(",", myArrayList.toArray(string.GetType()) );

기본적으로 당신이 알고있는 루프 ...

편집하다

어때 :

string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));

죄송합니다 .... 맞지 않습니다 ... 방법 : string.Join ( ",", Array.ConvertAll <object, string> (a.ToArray (), Convert.ToString));
mspmsp

8

string.Join(" ,", myArrayList.ToArray()); .net 프레임 워크 4.5에서 작동합니다.


2

다음은 문자열 목록에서 String.Join ()을 사용하여 쉼표로 구분 된 문자열 생성을 보여주는 간단한 예입니다.

List<string> histList = new List<string>();
histList.Add(dt.ToString("MM/dd/yyyy::HH:mm:ss.ffff"));
histList.Add(Index.ToString());
/*arValue is array of Singles */
foreach (Single s in arValue)
{
     histList.Add(s.ToString());
}
String HistLine = String.Join(",", histList.ToArray());

1
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()

또는

string.Concat(foo.ToArray().Select(a => a += ",").ToArray())

매우 오래되었으므로 업데이트 중입니다. 물론 string.Join을 사용해야합니다. 작성 당시에는 옵션으로 존재하지 않았습니다.


와, 정말 미안 해요! 나는 질문의 "C #"태그를 완전히 간과하고 귀하의 답변이 유효한 VB 코드라고 생각했습니다. 부끄러워. 그러나 우리가 짤막하게하는 동안 : 두 번째 대답은 끝에 추가 ","를 추가합니다.
Konrad Rudolph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.