mencetak semua isi array di C #

96

Saya mencoba untuk mencetak isi dari sebuah array setelah menjalankan beberapa metode yang mengubahnya, di Java saya menggunakan:

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

bagaimana cara melakukan ini di c #?

Padraic Cunningham
sumber

Jawaban:

176

Anda dapat mencoba ini:

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

Anda juga mungkin ingin mencoba sesuatu seperti ini:

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

EDIT: untuk mendapatkan output dalam satu baris [berdasarkan komentar Anda]:

 Console.WriteLine("[{0}]", string.Join(", ", yourArray));
 //output style:  [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]

EDIT (2019): Seperti yang disebutkan dalam jawaban lain, lebih baik menggunakan Array.ForEach<T>metode dan tidak perlu melakukan ToListlangkah.

Array.ForEach(yourArray, Console.WriteLine);
Hossein Narimani Rad
sumber
3
Perhatikan bahwa .ToString tidak diperlukan karena WriteLine memiliki berbagai kelebihan beban termasuk salah satu fallback yang mengambil Object.
Eren Ersönmez
Saya menggunakan alg.Id.ToList (). ForEach (Console.WriteLine), itu bekerja dengan baik terima kasih. Apakah mungkin untuk benar-benar mencetaknya seperti: [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]
Padraic Cunningham
@ Erenrsöme Ya. Kamu benar. tetapi bagaimana jika item itu adalah kelas khusus dengan ToStringmekanismenya sendiri .
Hossein Narimani Rad
1
Saat ForEachmenggunakan pendekatan: expected.ToList().ForEach(Console.WriteLine);Anda dapat menggunakan Referensi Metode daripada lambda yang akan membuat metode anonim baru yang tidak berguna.
Miguel Gamboa
Membuat daftar ToListhanya dengan menggunakan ForEachmetode ini adalah praktik IMHO yang mengerikan.
juharr
60

Ada banyak cara untuk melakukannya, jawaban lainnya bagus, berikut alternatifnya:

Console.WriteLine(string.Join("\n", myArrayOfObjects));
Matt Greer
sumber
Saya suka ini karena cocok untuk saya dalam menulis ke log: misalnya myArrayObjects adalah _validExtensions: Write2Log ("Mulai blabla dengan exenstions:" + string.Join ("-", _validImgExtensions) + "dan seterusnya");
Teo
Saya suka ini juga karena cocok dengan penebangan; Dan jika elemen array adalah salah satu objek Anda, Anda dapat mengganti ToString()dan menangani pemformatan di sana. var a = new [] { "Admin", "Peon" };_log.LogDebug($"Supplied roles are '{string.Join(", ", a)}'.");
Aaron
16

Yang paling mudah misalnya jika Anda memiliki array string yang dideklarasikan seperti string ini [] myStringArray = new string [];

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

Karena mengalami waktu henti di tempat kerja, saya memutuskan untuk menguji kecepatan metode berbeda yang diposting di sini.

Ini adalah empat metode yang saya gunakan.

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

Hasilnya adalah sebagai berikut:

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

Jadi Print3 adalah yang tercepat, karena hanya memiliki satu panggilan ke Console.WriteLine yang tampaknya menjadi hambatan utama untuk kecepatan mencetak sebuah array. Print4 sedikit lebih cepat dari Print2 dan Print1 adalah yang paling lambat dari semuanya.

Saya pikir Print4 mungkin yang paling serbaguna dari 4 yang saya uji, meskipun Print3 lebih cepat.

Jika saya melakukan kesalahan, beri tahu saya / perbaiki sendiri!

EDIT: Saya menambahkan IL yang dihasilkan di bawah ini

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   
TJ Wolschon
sumber
8

Pendekatan lain dengan Array.ForEach<T> Method (T[], Action<T>)metode Arraykelas

Array.ForEach(myArray, Console.WriteLine);

Itu hanya membutuhkan satu iterasi dibandingkan dengan array.ToList().ForEach(Console.WriteLine)yang membutuhkan dua iterasi dan membuat secara internal array kedua untuk List(runtime iterasi ganda dan pemakaian memori ganda)

fubo
sumber
1
Saya paling suka metode Anda, ini tercepat kedua sesuai pengujian saya tetapi lebih fleksibel daripada metode tercepat (menurut saya).
TJ Wolschon
2

Dalam C # Anda dapat mengulang melalui pencetakan array setiap elemen. Perhatikan bahwa System.Object mendefinisikan metode ToString (). Setiap jenis yang diberikan yang berasal dari System.Object () bisa menimpanya.

Mengembalikan string yang mewakili objek saat ini.

http://msdn.microsoft.com/en-us/library/system.object.tostring.aspx

Secara default, nama tipe lengkap dari objek akan dicetak, meskipun banyak tipe bawaan menimpa default itu untuk mencetak hasil yang lebih bermakna. Anda bisa mengganti ToString () di objek Anda sendiri untuk memberikan keluaran yang berarti.

foreach (var item in myArray)
{
    Console.WriteLine(item.ToString()); // Assumes a console application
}

Jika Anda memiliki kelas Foo Anda sendiri, Anda dapat mengganti ToString () seperti:

public class Foo
{
    public override string ToString()
    {
        return "This is a formatted specific for the class Foo.";
    }
}
Eric J.
sumber
1

Mulai dari C # 6.0 , ketika $ - string interpolasi telah diperkenalkan, ada satu cara lagi:

var array = new[] { "A", "B", "C" };
Console.WriteLine($"{string.Join(", ", array}");

//output
A, B, C

Penggabungan dapat diarsipkan menggunakan System.Linq, konversikan string[]ke, char[]dan cetak sebagai filestring

var array = new[] { "A", "B", "C" };
Console.WriteLine($"{new String(array.SelectMany(_ => _).ToArray())}");

//output
ABC
Johnny
sumber
0

Jika Anda ingin menjadi lucu, Anda bisa menulis metode ekstensi yang menulis IEnumerable<object>urutan ke konsol. Ini akan bekerja dengan enumerabel jenis apa pun, karena IEnumerable<T>kovarian pada 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);
        }
    }
}

(Saya tidak berpikir Anda akan menggunakan ini selain di kode tes.)

Matthew Watson
sumber
Butuh waktu beberapa saat untuk memahami sepenuhnya tetapi itu sangat berguna, saya terbiasa dengan Python dan memasukkan pernyataan cetak untuk membantu debug jadi ini bagus untuk saya. Terima kasih
Padraic Cunningham
0

Saya memberikan suara positif untuk jawaban metode ekstensi oleh Matthew Watson, tetapi jika Anda bermigrasi / mengunjungi yang berasal dari Python, Anda mungkin menemukan metode seperti itu berguna:

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

-> ini akan mencetak koleksi apa pun menggunakan pemisah yang disediakan. Ini sangat terbatas (koleksi bersarang?).

Untuk skrip (yaitu aplikasi konsol C # yang hanya berisi Program.cs, dan banyak hal terjadi di Program.Main) - ini mungkin baik-baik saja.

Tomasz Gandor
sumber
0

ini adalah cara termudah untuk mencetak String dengan menggunakan array !!!

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();
        }
    }
}
Snehal Thakkar
sumber
0

Jika itu adalah array string, Anda dapat menggunakan Agregat

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

dengan cara itu Anda dapat membalikkan urutan dengan mengubah urutan parameter seperti itu

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

Anda dapat menggunakan for loop

    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]}, ");
         }
     }
Aldin Ugljanin
sumber
-2

Jika Anda tidak ingin menggunakan fungsi 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();
    }
}
ugurpolat
sumber