[c#] 배열의 모든 내용을 C #으로 인쇄
Java에서 사용하는 일부 메서드를 호출 한 후 배열의 내용을 인쇄하려고합니다.
System.out.print(Arrays.toString(alg.id));
C #에서 어떻게합니까?
답변
시도해 볼 수 있습니다.
foreach(var item in yourArray)
{
Console.WriteLine(item.ToString());
}
또한 다음과 같이 시도해 볼 수 있습니다.
yourArray.ToList().ForEach(i => Console.WriteLine(i.ToString()));
편집 : [귀하의 의견에 따라] 한 줄로 출력을 얻으려면 :
Console.WriteLine("[{0}]", string.Join(", ", yourArray));
//output style: [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]
EDIT (2019) : 다른 답변에서 언급했듯이 Array.ForEach<T>
방법 을 사용하는 것이 더 좋으며 ToList
단계 를 수행 할 필요가 없습니다 .
Array.ForEach(yourArray, Console.WriteLine);
답변
이를 수행하는 방법에는 여러 가지가 있으며 다른 답변은 좋습니다. 여기에 대안이 있습니다.
Console.WriteLine(string.Join("\n", myArrayOfObjects));
답변
가장 쉬운 방법은 예를 들어 다음과 같이 선언 된 문자열 배열이있는 경우입니다. [] myStringArray = new string [];
Console.WriteLine("Array : ");
Console.WriteLine("[{0}]", string.Join(", ", myStringArray));
답변
직장에서 약간의 다운 타임이 발생했기 때문에 여기에 게시 된 다양한 방법의 속도를 테스트하기로 결정했습니다.
제가 사용한 네 가지 방법이 있습니다.
static void Print1(string[] toPrint)
{
foreach(string s in toPrint)
{
Console.Write(s);
}
}
static void Print2(string[] toPrint)
{
toPrint.ToList().ForEach(Console.Write);
}
static void Print3(string[] toPrint)
{
Console.WriteLine(string.Join("", toPrint));
}
static void Print4(string[] toPrint)
{
Array.ForEach(toPrint, Console.Write);
}
결과는 다음과 같습니다.
Strings per trial: 10000
Number of Trials: 100
Total Time Taken to complete: 00:01:20.5004836
Print1 Average: 484.37ms
Print2 Average: 246.29ms
Print3 Average: 70.57ms
Print4 Average: 233.81ms
따라서 Print3는 가장 빠릅니다. Console.WriteLine
배열을 인쇄하는 속도의 주요 병목 인 것처럼 보이는에 . Print4는 Print2보다 약간 빠르며 Print1은 가장 느립니다.
Print3가 더 빠르더라도 Print4는 아마도 내가 테스트 한 4 중에서 가장 다재다능하다고 생각합니다.
오류가 발생하면 언제든지 알려주세요.
편집 : 아래 생성 된 IL을 추가하고 있습니다.
g__Print10_0://Print1
IL_0000: ldarg.0
IL_0001: stloc.0
IL_0002: ldc.i4.0
IL_0003: stloc.1
IL_0004: br.s IL_0012
IL_0006: ldloc.0
IL_0007: ldloc.1
IL_0008: ldelem.ref
IL_0009: call System.Console.Write
IL_000E: ldloc.1
IL_000F: ldc.i4.1
IL_0010: add
IL_0011: stloc.1
IL_0012: ldloc.1
IL_0013: ldloc.0
IL_0014: ldlen
IL_0015: conv.i4
IL_0016: blt.s IL_0006
IL_0018: ret
g__Print20_1://Print2
IL_0000: ldarg.0
IL_0001: call System.Linq.Enumerable.ToList<String>
IL_0006: ldnull
IL_0007: ldftn System.Console.Write
IL_000D: newobj System.Action<System.String>..ctor
IL_0012: callvirt System.Collections.Generic.List<System.String>.ForEach
IL_0017: ret
g__Print30_2://Print3
IL_0000: ldstr ""
IL_0005: ldarg.0
IL_0006: call System.String.Join
IL_000B: call System.Console.WriteLine
IL_0010: ret
g__Print40_3://Print4
IL_0000: ldarg.0
IL_0001: ldnull
IL_0002: ldftn System.Console.Write
IL_0008: newobj System.Action<System.String>..ctor
IL_000D: call System.Array.ForEach<String>
IL_0012: ret
답변
수업 Array.ForEach<T> Method (T[], Action<T>)
방법에 대한 또 다른 접근 방식Array
Array.ForEach(myArray, Console.WriteLine);
array.ToList().ForEach(Console.WriteLine)
두 번의 반복을 사용하고 내부적으로 List
(이중 반복 런타임 및 이중 메모리 소비)에 대한 두 번째 배열을 만드는 것에 비해 한 번만 반복됩니다.
답변
C #에서는 각 요소를 인쇄하는 배열을 반복 할 수 있습니다. System.Object는 ToString () 메서드를 정의합니다. System.Object ()에서 파생되는 모든 지정된 형식은이를 재정의 할 수 있습니다.
현재 개체를 나타내는 문자열을 반환합니다.
http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx
기본적으로 개체의 전체 유형 이름이 인쇄되지만 많은 내장 유형이 기본값을 재정 의하여보다 의미있는 결과를 인쇄합니다. 의미있는 출력을 제공하기 위해 자체 개체에서 ToString ()을 재정의 할 수 있습니다.
foreach (var item in myArray)
{
Console.WriteLine(item.ToString()); // Assumes a console application
}
자체 클래스 Foo가있는 경우 다음과 같이 ToString ()을 재정의 할 수 있습니다.
public class Foo
{
public override string ToString()
{
return "This is a formatted specific for the class Foo.";
}
}
답변
C # 6.0 부터 $ -문자열 보간이 도입 되었을 때 한 가지 방법이 더 있습니다.
var array = new[] { "A", "B", "C" };
Console.WriteLine($"{string.Join(", ", array}");
//output
A, B, C
연결은 System.Linq
,로 변환 및 인쇄 string[]
를 사용하여 보관할 수 있습니다 char[]
.string
var array = new[] { "A", "B", "C" };
Console.WriteLine($"{new String(array.SelectMany(_ => _).ToArray())}");
//output
ABC