সি # তে পূর্ণসংখ্যার ক্রম কীভাবে তৈরি করবেন?


119

এফ # এর সিকোয়েন্স রয়েছে যা সিকোয়েন্স তৈরি করতে দেয়:

seq { 0 .. 10 }

0 থেকে 10 পর্যন্ত সংখ্যার ক্রম তৈরি করুন।

সি # তেও কি তেমন কিছু আছে?

উত্তর:


206

আপনি ব্যবহার করতে পারেন Enumerable.Range(0, 10);। উদাহরণ:

var seq = Enumerable.Range(0, 10);

এমএসডিএন পৃষ্ঠা এখানে


66
দ্রষ্টব্য: এটি 10 ​​টি আইটেমের সাথে 0 এ শুরু হওয়া ক্রম তৈরি করে (9 এ শেষ হয়)। আপনি 0 চান মাধ্যমে 10, দ্বিতীয় প্যারামিটারটি 11. হবে এবং যদি আপনি একটি আসল অ্যারের এবং প্রয়োজন IEnumerable<int>, একটি কল অন্তর্ভুক্ত .ToArray()
অ্যান্থনি পেগ্রাম


19

আপনি একটি সাধারণ ফাংশন তৈরি করতে পারেন। এটি আরও জটিল ক্রমের জন্য কাজ করবে। অন্যথায় করা Enumerable.Rangeউচিত।

IEnumerable<int> Sequence(int n1, int n2)
{
    while (n1 <= n2)
    {
        yield return  n1++;
    }
}

"আরও জটিল" দ্বারা আপনার বোঝানো কি ঠিক "যেখানে আপনি উপাদানগুলির সংখ্যার পরিবর্তে শুরু করেছেন এবং শেষ"? অন্যথায় আমি আপনার অর্থ মিস করছি। 🤔
রাফিন ২

1
আমি বিশ্বাস করি আমি বিবেচনা করছি OddSequence EvenSequenceবা অন্যান্য কাস্টম রেঞ্জ। if (++n1 % 2 == 0) yield return n1, উদাহরণ স্বরূপ. এটি কয়েক দিন হয়েছে;)
জোশিয়ায় রুডেল

হা, হ্যাঁ, আমি মনে করি এক বা দুটি দিন। বা কয়েক হাজার। ; ^)
Ruffin

7

বিরল ব্যবহৃত ইন্ডেক্সার ওভারলোডের সাথে লিনক প্রক্ষেপণ (i) :

(new int[11]).Select((o,i) => i)

আমি এই পদ্ধতিটি এর নমনীয়তার জন্য পছন্দ করি।

উদাহরণস্বরূপ, যদি আমি সন্ধ্যায় চাই:

(new int[11]).Select((item,i) => i*2)

বা যদি আমি এক ঘন্টা 5 মিনিটের ইনক্রিমেন্ট চাই:

(new int[12]).Select((item,i) => i*5)

বা স্ট্রিং:

(new int[12]).Select((item,i) => "Minute:" + i*5)

আমি সত্যিই এটি পছন্দ করি তবে এটি একই সাথে কিছুটা হ্যাকিও বোধ করে!
জিমানো

lol :-) এটি সূচক ওভারলোডের একটি দুর্দান্ত সৃজনশীল ব্যবহার!
জিমানো

2

সি # 8.0 এ আপনি সূচক এবং ব্যাপ্তি ব্যবহার করতে পারেন

উদাহরণ স্বরূপ:

var seq = 0..2;
var array = new string[]
{
    "First",
    "Second",
    "Third",
};

foreach(var s in array[seq])
{
    System.Console.WriteLine(s);
}
// Output: First, Second

অথবা আপনি যদি তৈরি করতে চান IEnumerable<int>তবে আপনি এক্সটেনশনটি ব্যবহার করতে পারেন:

public static IEnumerable<int> ToEnumerable(this Range range)
{
   for (var i = range.Start.Value; i < range.End.Value; i++)
   {
       yield return i;
   }
}
...
var seq = 0..2;

foreach (var s in seq.ToEnumerable())
{
   System.Console.WriteLine(s);
}
// Output: 0, 1

পিএস তবে 'শেষ থেকে সূচকগুলি' সম্পর্কে সতর্ক থাকুন । উদাহরণস্বরূপ, ToEnumerable এক্সটেনশন পদ্ধতিটি কাজ করছে না var seq = ^2..^0


1

আমার বাস্তবায়ন:

    private static IEnumerable<int> Sequence(int start, int end)
    {
        switch (Math.Sign(end - start))
        {
            case -1:
                while (start >= end)
                {
                    yield return start--;
                }

                break;

            case 1:
                while (start <= end)
                {
                    yield return start++;
                }

                break;

            default:
                yield break;
        }
    }

0

মূলত এখানে উত্তর


আপনি যদি কোনও ভেরিয়েবল IEnumerable<int>থেকে সংখ্যার ( ) সংখ্যা ক্রমিক হিসাবে গণ্য করতে চান তবে চেষ্টা করুন0end

Enumerable.Range(0, ++10);

ব্যাখ্যায়, 0 থেকে 10 পর্যন্ত সংখ্যার ক্রম পেতে, আপনি ক্রমটি 0 থেকে শুরু করতে চান (মনে রাখবেন যে সেখানে 0 এবং 10 এর মধ্যে 11 সংখ্যা রয়েছে)।


আপনি যদি সীমাহীন লিনিয়ার সিরিজটি চান তবে আপনি একটি ফাংশন লিখতে পারেন

IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
    while (true)
    {
        yield return k;
        k = (c * k) + n;
    }
}

যা আপনি পছন্দ করতে পারেন

var ZeroTo1000 = Series().Take(11);

আপনি যদি কোনও ফাংশন চান তবে বার বার কল করতে পারেন ইনক্রিমেন্টিং নম্বর উত্পন্ন করতে, সম্ভবত আপনি কিছু চান।

using System.Threading;

private static int orderNumber = 0;

int Seq()
{
    return Interlocked.Increment(ref orderNumber);
}

আপনি যখন কল Seq()করবেন তখন এটি পরবর্তী অর্ডার নম্বর এবং কাউন্টারকে বাড়িয়ে দেবে incre


0

আমার কোডগুলিতে আমার এই ফাংশনগুলি রয়েছে

private static IEnumerable<int> FromZero(this int count)
    {
        if (count <= 0)
            yield break;

        for (var i = 0; i < count; i++)
        {
            yield return i;
        }
    }

    private static IEnumerable<int> FromOne(this int count)
    {
        if (count <= 0)
            yield break;

        for (var i = 1; i <= count; i++)
        {
            yield return i;
        }
    }

এটি (i) কোডের জন্য কিছু হ্রাস করতে সহায়তা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.