সি # তে অ্যারের সমস্ত সামগ্রী মুদ্রণ করা হচ্ছে


95

জাভাতে আমি যে পদ্ধতি ব্যবহার করে তা পরিবর্তন করে এমন কিছু পদ্ধতির অনুরোধ করার পরে অ্যারের সামগ্রীগুলি মুদ্রণ করার চেষ্টা করছি:

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

আমি সি # এ কিভাবে করব?

উত্তর:


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]

সম্পাদনা (2019): অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে তবে Array.ForEach<T>পদ্ধতি ব্যবহার করা আরও ভাল এবং ToListপদক্ষেপটি করার দরকার নেই ।

Array.ForEach(yourArray, Console.WriteLine);

4
নোট করুন .ToString প্রয়োজনীয় নয় যেহেতু WritLine এর বিভিন্ন ওভারলোড রয়েছে যাতে একটি অবজেক্ট নেয় fall
এরেন এরসনেমেজ

আমি alg.Id.ToList ()। ForEach (কনসোল.উরাইটলাইন) ব্যবহার করেছি, যা আপনাকে ধন্যবাদ ধন্যবাদ দিয়েছিল। আসলে কি এটির মতো মুদ্রণ করা সম্ভব: [8, 1, 8, 8, 4, 8, 6, 8, 8, 8]
প্যাডারিক কানিংহাম

@ ErenErsönmez হ্যাঁ তুমি ঠিক. তবে আইটেমটি যদি নিজস্ব ToStringব্যবস্থার সাথে একটি কাস্টম শ্রেণি হয় ।
হোসেইন নারিমণি র‌্যাড

4
উপর ForEachপদ্ধতির ব্যবহার: expected.ToList().ForEach(Console.WriteLine);আপনি একটি পদ্ধতি রেফারেন্স এর পরিবর্তে একটি ল্যামডা যে একটি নতুন বেহুদা বেনামী পদ্ধতি তৈরি করবে এর ব্যবহার করতে পারে।
মিগুয়েল গ্যাম্বোয়া

ToListকেবল ForEachপদ্ধতিটি ব্যবহারের জন্য একটি তালিকা তৈরি করা একটি ভয়ঙ্কর অনুশীলন আইএমএইচও।
জুহর

60

এটি করার অনেকগুলি উপায় রয়েছে, অন্যান্য উত্তরগুলি ভাল, এখানে একটি বিকল্প রয়েছে:

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

আমি এটি পছন্দ করি কারণ লগ করার জন্য আমার লেখার পক্ষে এটি উপযুক্ত;
টিও

লগিংয়ের সাথে এটি বেশ ভালভাবে ফিট করে বলে আমিও এটি পছন্দ করি; এবং যদি অ্যারের উপাদানটি আপনার অবজেক্টগুলির মধ্যে একটি হয় তবে আপনি ওভাররাইড করতে পারেন ToString()এবং সেখানে বিন্যাসটি পরিচালনা করতে পারেন । var a = new [] { "Admin", "Peon" };_log.LogDebug($"Supplied roles are '{string.Join(", ", a)}'.");
হারুন

16

সবচেয়ে সহজ একটি উদাহরণস্বরূপ যদি আপনার কাছে এই স্ট্রিংয়ের মতো স্ট্রিং অ্যারে ঘোষণা করা হয় [] মাইস্ট্রিংআরে = নতুন স্ট্রিং [];

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

সুতরাং প্রিন্ট 3 দ্রুততম, কারণ এটিতে কেবল একটি কল রয়েছে Console.WriteLineযা মনে হয় কোনও অ্যারে মুদ্রণের গতির জন্য এটি প্রধান বাধা। মুদ্রণ 4 প্রিন্ট 2 এর তুলনায় কিছুটা দ্রুত এবং মুদ্রণ 1 হ'ল সকলের চেয়ে ধীরতম।

আমি মনে করি যে প্রিন্ট 3 দ্রুত হওয়া সত্ত্বেও প্রিন্ট 4 সম্ভবত আমি পরীক্ষিত 4 টির মধ্যে সবচেয়ে বহুমুখী।

যদি আমি কোনও ত্রুটি করি তবে নির্দ্বিধায় আমাকে সেগুলি জানাতে / আপনার নিজের থেকে ঠিক করতে দিন!

সম্পাদনা: আমি নিচের উত্পন্ন আইএল যুক্ত করছি

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(ডাবল পুনরাবৃত্তি রানটাইম এবং ডাবল মেমরি গ্রহণের জন্য) জন্য একটি দ্বিতীয় অ্যারে তৈরি করে


4
আমি আপনার পদ্ধতিটি সর্বোত্তম পছন্দ করি, এটি আমার পরীক্ষার অনুযায়ী দ্বিতীয় দ্রুত তবে এটি দ্রুততম পদ্ধতির চেয়ে আমার তুলনায় বহুমুখী (আমার মতে)।
টিজে ওলছন

2

সি # তে আপনি প্রতিটি উপাদান অ্যারে মুদ্রণ করে লুপ করতে পারেন। নোট করুন যে System.Object একটি পদ্ধতি ToString () সংজ্ঞায়িত করে। সিস্টেম.অবজেক্ট () থেকে প্রাপ্ত যে কোনও প্রদত্ত প্রকার এটিকে ওভাররাইড করতে পারে।

একটি স্ট্রিং প্রদান করে যা বর্তমান অবজেক্টকে উপস্থাপন করে।

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

ডিফল্টরূপে অবজেক্টের পুরো প্রকারের নাম মুদ্রণ করা হবে, যদিও অনেকগুলি অন্তর্নির্মিত প্রকারগুলি আরও অর্থবহী ফলাফল মুদ্রণের জন্য সেই ডিফল্টটিকে ওভাররাইড করে। অর্থবহ আউটপুট সরবরাহ করতে আপনি নিজের নিজের অবজেক্টে টসস্ট্রিং () ওভাররাইড করতে পারেন।

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

যদি আপনার নিজস্ব ক্লাস ফু থাকে তবে আপনি টসস্ট্রিং () এর মতো ওভাররাইড করতে পারেন:

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

1

সি # 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>এটি টি তে সমবায়:

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

(আমি মনে করি না আপনি এটি পরীক্ষার কোড ব্যতীত অন্যটি ব্যবহার করবেন d)


আমাকে পুরোপুরি বুঝতে কিছুটা সময় নিল তবে এটি খুব সহজ, আমি পাইথনের অভ্যস্ত এবং ডিবাগটি সহায়তা করতে প্রিন্ট স্টেটমেন্টগুলি রেখেছি তাই এটি আমার পক্ষে ভাল han ধন্যবাদ
কানিংহাম

0

আমি ম্যাথু ওয়াটসনের দ্বারা এক্সটেনশন পদ্ধতির উত্তরটি উন্নত করেছিলাম, তবে আপনি পাইথন থেকে আগত / মাইগ্রেশন করে যদি আসেন, আপনি এই জাতীয় পদ্ধতিটি দরকারী দেখতে পাবেন:

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

-> এটি সরবরাহকারী বিভাজক ব্যবহার করে যে কোনও সংগ্রহ মুদ্রণ করবে। এটি বেশ সীমাবদ্ধ (নেস্টেড সংগ্রহ?)।

কোনও স্ক্রিপ্টের জন্য (যেমন একটি সি # কনসোল অ্যাপ্লিকেশন যাতে কেবল প্রোগ্রামডস থাকে এবং বেশিরভাগ ক্ষেত্রে ঘটে থাকে 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

যদি এটি স্ট্রিংগুলির একটি অ্যারে হয় তবে আপনি সমষ্টিটি ব্যবহার করতে পারেন

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

আপনি লুপ জন্য ব্যবহার করতে পারেন

    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

আপনি যদি অ্যারে ফাংশনটি ব্যবহার করতে না চান।

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.