배열의 모든 내용을 C #으로 인쇄


95

Java에서 사용하는 일부 메서드를 호출 한 후 배열의 내용을 인쇄하려고합니다.

System.out.print(Arrays.toString(alg.id));

C #에서 어떻게합니까?

답변:


175

시도해 볼 수 있습니다.

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);

3
WriteLine에는 Object를 사용하는 폴백을 포함하여 다양한 오버로드가 있으므로 .ToString이 필요하지 않습니다.
Eren Ersönmez 2013

나는 alg.Id.ToList (). ForEach (Console.WriteLine)을 사용했는데 잘 작동했습니다. 실제로 다음과 같이 인쇄 할 수 있습니까? [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]
Padraic Cunningham

@ ErenErsönmez 네. 당신이 옳습니다. 하지만 아이템이 자체 ToString메커니즘을 가진 커스텀 클래스라면 어떨까요?
Hossein Narimani Rad 2013

1
ForEach접근 사용 : expected.ToList().ForEach(Console.WriteLine);새 쓸모없는 익명 메소드를 생성합니다 람다 대신 메서드 참조를 사용할 수 있습니다.
Miguel Gamboa

방법 ToList을 사용하기 위해 목록을 만드는 것은 ForEachIMHO 끔찍한 연습입니다.
juharr

60

이를 수행하는 방법에는 여러 가지가 있으며 다른 답변은 좋습니다. 여기에 대안이 있습니다.

Console.WriteLine(string.Join("\n", myArrayOfObjects));

log : eg myArrayObjects가 _validExtensions : Write2Log ( "Start blabla with the exenstions :"+ string.Join ( "-", _validImgExtensions) + "etc");
Teo

로깅과 잘 어울리기 때문에 이것도 마음에 듭니다. 배열 요소가 개체 중 하나 인 ToString()경우 여기에서 서식을 재정의 하고 처리 할 수 있습니다 . var a = new [] { "Admin", "Peon" };_log.LogDebug($"Supplied roles are '{string.Join(", ", a)}'.");
Aaron

16

가장 쉬운 방법은 예를 들어 다음과 같이 선언 된 문자열 배열이있는 경우입니다. [] myStringArray = new string [];

Console.WriteLine("Array : ");
Console.WriteLine("[{0}]", string.Join(", ", myStringArray));

10

직장에서 약간의 다운 타임이 발생했기 때문에 여기에 게시 된 다양한 방법의 속도를 테스트하기로 결정했습니다.

제가 사용한 네 가지 방법이 있습니다.

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   

8

수업 Array.ForEach<T> Method (T[], Action<T>)방법에 대한 또 다른 접근 방식Array

Array.ForEach(myArray, Console.WriteLine);

array.ToList().ForEach(Console.WriteLine)두 번의 반복을 사용하고 내부적으로 List(이중 반복 런타임 및 이중 메모리 소비)에 대한 두 번째 배열을 만드는 것에 비해 한 번만 반복됩니다.


1
나는 당신의 방법을 가장 좋아하고 내 테스트에 따라 두 번째로 빠르지 만 가장 빠른 방법보다 다재다능합니다 (내 의견으로는).
TJ Wolschon

2

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.";
    }
}

1

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

0

귀여워지고 싶다면 IEnumerable<object>콘솔에 시퀀스를 쓰는 확장 메서드를 작성할 수 있습니다. 이것은 IEnumerable<T>T에서 공변 하기 때문에 모든 유형의 열거 형에서 작동합니다 .

using System;
using System.Collections.Generic;

namespace Demo
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            string[] array  = new []{"One", "Two", "Three", "Four"};
            array.Print();

            Console.WriteLine();

            object[] objArray = new object[] {"One", 2, 3.3, TimeSpan.FromDays(4), '5', 6.6f, 7.7m};
            objArray.Print();
        }
    }

    public static class MyEnumerableExt
    {
        public static void Print(this IEnumerable<object> @this)
        {
            foreach (var obj in @this)
                Console.WriteLine(obj);
        }
    }
}

(테스트 코드 외에는 이것을 사용하지 않을 것이라고 생각합니다.)


완전히 이해하는 데 시간이 좀 걸렸지 만 매우 편리합니다. 저는 Python에 익숙하고 디버그를 돕기 위해 print 문을 넣는 것이 좋습니다. 감사합니다
Padraic Cunningham

0

Matthew Watson의 확장 방법 답변을 찬성했지만 Python에서 마이그레이션 / 방문하는 경우 이러한 방법이 유용 할 수 있습니다.

class Utils
{
    static void dump<T>(IEnumerable<T> list, string glue="\n")
    {
        Console.WriteLine(string.Join(glue, list.Select(x => x.ToString())));
    }
}

-> 제공된 구분 기호를 사용하여 모든 컬렉션을 인쇄합니다. 매우 제한적입니다 (중첩 된 컬렉션?).

스크립트 (예 : Program.cs 만 포함하고 대부분의 작업은에서 발생하는 C # 콘솔 애플리케이션 Program.Main)의 경우-괜찮을 수 있습니다.


0

이것은 배열을 사용하여 문자열을 인쇄 할 수있는 가장 쉬운 방법입니다 !!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace arraypracticeforstring
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] arr = new string[3] { "Snehal", "Janki", "Thakkar" };

            foreach (string item in arr)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadLine();
        }
    }
}

0

문자열 배열 인 경우 Aggregate 를 사용할 수 있습니다.

var array = new string[] { "A", "B", "C", "D"};
Console.WriteLine(array.Aggregate((result, next) => $"{result}, {next}")); // A, B, C, D

이렇게하면 매개 변수의 순서를 변경하여 순서를 바꿀 수 있습니다.

Console.WriteLine(array.Aggregate((result, next) => $"{next}, {result}")); // D, C, B, A

0

for 루프를 사용할 수 있습니다.

    int[] random_numbers = {10, 30, 44, 21, 51, 21, 61, 24, 14}
    int array_length = random_numbers.Length;
    for (int i = 0; i < array_length; i++){
        if(i == array_length - 1){
              Console.Write($"{random_numbers[i]}\n");
        } else{
              Console.Write($"{random_numbers[i]}, ");
         }
     }

-2

Array 기능을 사용하지 않으려는 경우.

public class GArray
{
    int[] mainArray;
    int index;
    int i = 0;

    public GArray()
    {
        index = 0;
        mainArray = new int[4];
    }
    public void add(int addValue)
    {

        if (index == mainArray.Length)
        {
            int newSize = index * 2;
            int[] temp = new int[newSize];
            for (int i = 0; i < mainArray.Length; i++)
            {
                temp[i] = mainArray[i];
            }
            mainArray = temp;
        }
        mainArray[index] = addValue;
        index++;

    }
    public void print()
    {
        for (int i = 0; i < index; i++)
        {
            Console.WriteLine(mainArray[i]);
        }
    }
 }
 class Program
{
    static void Main(string[] args)
    {
        GArray myArray = new GArray();
        myArray.add(1);
        myArray.add(2);
        myArray.add(3);
        myArray.add(4);
        myArray.add(5);
        myArray.add(6);
        myArray.print();
        Console.ReadKey();
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.