web-dev-qa-db-ja.com

C#で配列のすべての内容を印刷する

私が使用するJavaで、それを変更するいくつかのメソッドを呼び出した後、配列の内容を出力しようとしています:

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

c#でこれをどのように行うのですか?

54

これを試すことができます:

foreach(var item in yourArray)
{
    Console.WriteLine(item.ToString());
}

また、次のようなものを試してみることもできます。

yourArray.ToList().ForEach(i => Console.WriteLine(i.ToString()));

編集: [コメントに基づいて] 1行で出力を取得するには:

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

それを行うには多くの方法がありますが、他の答えは良いです、ここに代替案があります:

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

最も簡単なものこのように宣言された文字列配列がある場合string [] myStringArray = new string [];

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

Array.ForEach<T> Method (T[], Action<T>) メソッドの別のアプローチ Array クラス

Array.ForEach(myArray, Console.WriteLine);

これは、2回の反復を実行し、Listの2番目の配列を内部で作成するarray.ToList().ForEach(Console.WriteLine)と比較して、1回の反復のみを使用します(2回の反復ランタイムと2回のメモリ消費)

5
fubo

職場でのダウンタイムがあるため、ここに掲載されているさまざまな方法の速度をテストすることにしました。

これらは私が使用した4つの方法です。

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への呼び出しが1つしかないため、配列の印刷速度の主なボトルネックと思われるため、Print3は最速です。 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   
4
TJ Wolschon

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

C#6.から始まり、$-文字列補間が導入された場合、もう1つの方法があります。

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
1
Johnny

キュートにしたい場合は、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);
        }
    }
}

(テストコード以外でこれを使用するとは思わない。)

0
Matthew Watson

これは、配列を使用して文字列を印刷できる最も簡単な方法です!!!

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
Snehal Thakkar