C # सरणी में मान जोड़ना


510

संभवतः यह वास्तव में सरल है - मैं C # के साथ शुरू कर रहा हूं और उदाहरण के लिए, एक सरणी में मान जोड़ने की आवश्यकता है:

int[] terms;

for(int runs = 0; runs < 400; runs++)
{
    terms[] = runs;
}

PHP का उपयोग करने वालों के लिए, यहाँ C # में क्या करने की कोशिश की जा रही है:

$arr = array();
for ($i = 0; $i < 10; $i++) {
    $arr[] = $i;
}

10
'शर्तें [] = मान नहीं होना चाहिए?' 'शर्तें [] = रन?'
tymtam

C # में, आप एक बार निर्मित होने के बाद सरणी का आकार नहीं बदल सकते। यदि आप सरणियों जैसा कुछ चाहते हैं, लेकिन तत्वों को जोड़ने / हटाने में सक्षम हैं, तो सूची <int> () का उपयोग करें।
कामरान बिगली

जवाबों:


820

आप इस तरह से कर सकते हैं -

int[] terms = new int[400];
for (int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

वैकल्पिक रूप से, आप सूचियों का उपयोग कर सकते हैं - सूचियों के साथ लाभ, आपको सूची को तत्काल करते समय सरणी आकार को जानने की आवश्यकता नहीं है।

List<int> termsList = new List<int>();
for (int runs = 0; runs < 400; runs++)
{
    termsList.Add(value);
}

// You can convert it back to an array if you would like to
int[] terms = termsList.ToArray();

संपादित करें: ए) सूची पर छोरों के लिए <टी> सूची <टी> पर फॉर्चेट छोरों की तुलना में 2 गुना अधिक सस्ता है , ए) सूची पर लूपिंग लगभग 2 गुना सस्ता है सूची <टी>, सी) पर लूपिंग से सरणी के लिए उपयोग करना सूची से 5 गुना सस्ता है <<> foreach का उपयोग करके (जो हम में से अधिकांश करते हैं)।


1
इस परिदृश्य में सूची का उपयोग करने का क्या फायदा?
फिल हिले

9
@PHHHley इसे बनाने से पहले आपको "पता" नहीं है कि सरणी कितनी बड़ी हो सकती है। जैसा कि आप देख सकते हैं, इन उदाहरणों में, ओपी को "नए int [400]" में एक मूल्य रखना है - लेकिन सूची के साथ, उसे ऐसा करने की आवश्यकता नहीं है।
हेजनर

3
मूल्य के रूप में कहीं भी परिभाषित नहीं होने से कोड का पहला बिट कुछ भी नहीं होगा। -_-
ईज़ीबीबी

1
आप क्यों कहते हैं कि ARRAY का आकार होना चाहिए ??? बस करो new int[]{}!!!!
टोडुआ

6
@ T.Todua यदि आप सुझाव दे रहे हैं जैसे एक खाली सरणी बनाते हैं और फिर मान सेट करने के लिए यह गैर-मौजूद इंडेक्स तक पहुंचने का प्रयास करते हैं, तो OutOfRangeExceptionकोड मिलते ही आपको मिल जाएगा । Arrays को आपके द्वारा उपयोग किए जा रहे आकार के साथ आरंभीकृत करने की आवश्यकता होती है, वे शुरुआत में सभी स्थान आरक्षित करते हैं, चुड़ैल उन्हें बहुत तेज़ बनाती है, लेकिन उनका आकार बदलना संभव नहीं है।
KinSlayerUY

85

यदि आप C # 3 में लिख रहे हैं, तो आप इसे एक-लाइनर के साथ कर सकते हैं:

int[] terms = Enumerable.Range(0, 400).ToArray();

यह कोड स्निपेट मानता है कि आपके पास अपनी फ़ाइल के शीर्ष पर System.Linq के लिए एक निर्देश का उपयोग है।

दूसरी ओर, यदि आप किसी ऐसी चीज़ की तलाश कर रहे हैं, जिसे गतिशील रूप से आकार बदला जा सकता है, जैसा कि प्रतीत होता है कि PHP के लिए मामला है (मैंने वास्तव में इसे कभी नहीं सीखा है), तो आप एक इंट के बजाय एक सूची का उपयोग करना चाह सकते हैं [] । यहाँ वह कोड कैसा दिखेगा:

List<int> terms = Enumerable.Range(0, 400).ToList();

हालाँकि, ध्यान दें कि आप एक मूल्य के लिए [400] शब्दों को निर्धारित करके केवल 401 वां तत्व नहीं जोड़ सकते। आपको इसके बजाय Add () को कॉल करने की आवश्यकता होगी, जैसे:

terms.Add(1337);

65

Linq की विधि Concat का उपयोग करना इसे सरल बनाता है

int[] array = new int[] { 3, 4 };

array = array.Concat(new int[] { 2 }).ToArray();

परिणाम 3,4,2


12
विधि 400 वस्तुओं को जोड़कर बना देगी सरणी में एक और स्थान के साथ सरणी की एक प्रति बनाएं और सभी तत्वों को नए सरणी में 400 सौ बार स्थानांतरित करें। ऐसा प्रदर्शन के लिहाज से अनुशंसित नहीं है।
KinSlayerUY

39

सरणी का उपयोग करके इसे कैसे करें, इसके उत्तर यहां दिए गए हैं।

हालाँकि, C # में एक बहुत ही काम की चीज है, जिसे System.Collections :) कहा जाता है।

संग्रह एक सरणी का उपयोग करने के लिए फैंसी विकल्प हैं, हालांकि उनमें से कई आंतरिक रूप से एक सरणी का उपयोग करते हैं।

उदाहरण के लिए, C # के पास एक संग्रह है जिसे सूची कहा जाता है जो PHP सरणी के समान कार्य करता है।

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}

सूची तत्व प्राप्त करने के लिए: int a = list [i];
बेहज़ाद

10

एक मध्यस्थ के रूप में एक सूची का उपयोग करना सबसे आसान तरीका है, जैसा कि अन्य लोगों ने वर्णन किया है, लेकिन चूंकि आपका इनपुट एक सरणी है और आप डेटा को केवल एक सूची में नहीं रखना चाहते हैं, मुझे लगता है कि आप प्रदर्शन के बारे में चिंतित हो सकते हैं।

सबसे कुशल विधि एक नया सरणी आवंटित करने और फिर Array.Copy या Array.CopyTo का उपयोग करने की संभावना है। यह कठिन नहीं है यदि आप सूची के अंत में एक आइटम जोड़ना चाहते हैं:

public static T[] Add<T>(this T[] target, T item)
{
    if (target == null)
    {
        //TODO: Return null or throw ArgumentNullException;
    }
    T[] result = new T[target.Length + 1];
    target.CopyTo(result, 0);
    result[target.Length] = item;
    return result;
}

मैं एक इन्सर्ट एक्सटेंशन मेथड के लिए भी कोड पोस्ट कर सकता हूं जो वांछित होने पर इनपुट के रूप में एक गंतव्य इंडेक्स लेता है। यह थोड़ा अधिक जटिल है और स्थिर विधि Array.Copy 1-2 बार उपयोग करता है।


2
यह बेहतर होगा कि, एक सूची बनाने के लिए प्रदर्शन के लिहाज से, इसे भरें और फिर इस प्रतिलिपि को अंत में सरणी में रखें, इसलिए आप 400 से अधिक बार सरणी बना और कॉपी नहीं कर रहे हैं
KinSlayerUY

10

थ्रेक्स के उत्तर के आधार पर (मेरे पास उत्तर देने के लिए पर्याप्त बिंदु नहीं हैं):

public static T[] Add<T>(this T[] target, params T[] items)
    {
        // Validate the parameters
        if (target == null) {
            target = new T[] { };
        }
        if (items== null) {
            items = new T[] { };
        }

        // Join the arrays
        T[] result = new T[target.Length + items.Length];
        target.CopyTo(result, 0);
        items.CopyTo(result, target.Length);
        return result;
    }

यह केवल एक आइटम को सरणी में जोड़ने की अनुमति देता है, या दो सरणी में शामिल होने के लिए पैरामीटर के रूप में केवल एक सरणी पास करता है।


8

आपको पहले सरणी आवंटित करनी होगी:

int [] terms = new int[400]; // allocate an array of 400 ints
for(int runs = 0; runs < terms.Length; runs++) // Use Length property rather than the 400 magic number again
{
    terms[runs] = value;
}

5
int ArraySize = 400;

int[] terms = new int[ArraySize];


for(int runs = 0; runs < ArraySize; runs++)
{

    terms[runs] = runs;

}

यह होगा कि मैं इसे कैसे कोडित करूंगा।


3

C # सरणियाँ निश्चित लंबाई और हमेशा अनुक्रमित होती हैं। Motti के समाधान के साथ जाओ:

int [] terms = new int[400];
for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

ध्यान दें कि यह सरणी एक घने सरणी है, 400 बाइट्स का एक सन्निहित ब्लॉक जहां आप चीजों को छोड़ सकते हैं। यदि आप एक गतिशील आकार की सरणी चाहते हैं, तो सूची <int> का उपयोग करें।

List<int> terms = new List<int>();
for(int runs = 0; runs < 400; runs ++)
{
    terms.Add(runs);
}

न तो int [] और न ही सूची <int> एक सहयोगी सरणी है - जो कि C # में एक शब्दकोश <> होगा। दोनों सरणियाँ और सूचियाँ घनी हैं।


2
int[] terms = new int[10]; //create 10 empty index in array terms

//fill value = 400 for every index (run) in the array
//terms.Length is the total length of the array, it is equal to 10 in this case 
for (int run = 0; run < terms.Length; run++) 
{
    terms[run] = 400;
}

//print value from each of the index
for (int run = 0; run < terms.Length; run++)
{
    Console.WriteLine("Value in index {0}:\t{1}",run, terms[run]);
}

Console.ReadLine();

/ * आउटपुट:

सूचकांक में मूल्य ०: ४०० का
मूल्य सूचकांक १: ४०० का
मूल्य सूचकांक २ में: ४०० का
मूल्य सूचकांक ३ में: ४०० का
मूल्य सूचकांक में ४: ४०० का
मूल्य सूचकांक में ५: ४०० का
मूल्य सूचकांक में ६: ४०० का
मूल्य सूचकांक में:: ४०० के
मूल्य में सूचकांक 8: 400
सूचकांक 9 में मूल्य: 400
* /


क्या आप इसका समाधान बता सकते हैं?
डीप फ्रोजन

रूण, मैंने अभी स्रोत कोड के अंदर टिप्पणी शामिल की है> आशा है कि यह आपके प्रश्न का उत्तर दे सकता है।
23

2

आप किसी तत्व को आसानी से किसी सरणी में नहीं जोड़ सकते। आप दिए गए पद पर तत्व को 88888 उल्लिखित के रूप में सेट कर सकते हैं , लेकिन मैं अनुशंसा करता हूं कि आप इसका उपयोग करें List<int>या Collection<int>इसके बजाय, और उपयोग करें ToArray()यदि आपको इसे एक सरणी में परिवर्तित करने की आवश्यकता है।


2

यदि आपको वास्तव में एक सरणी की आवश्यकता है, तो निम्नलिखित संभवत: सबसे सरल है:

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}

int [] terms = list.ToArray();

2

मैं इसे दूसरे वेरिएंट के लिए जोड़ूंगा। मैं इस प्रकार की कार्यात्मक कोडिंग लाइनों को अधिक पसंद करता हूं।

Enumerable.Range(0, 400).Select(x => x).ToArray();

1

यदि आप ऐरे का आकार नहीं जानते हैं या पहले से ही एक मौजूदा सरणी है जिसे आप जोड़ रहे हैं। आप इसके बारे में दो तरीकों से जा सकते हैं। पहला एक जेनेरिक का उपयोग कर रहा है List<T>: ऐसा करने के लिए आप सरणी को एक में बदलना चाहेंगे var termsList = terms.ToList();और ऐड विधि का उपयोग करेंगे। फिर जब किया जाता है तो var terms = termsList.ToArray();किसी ऐरे में वापस बदलने की विधि का उपयोग करें ।

var terms = default(int[]);
var termsList = terms == null ? new List<int>() : terms.ToList();

for(var i = 0; i < 400; i++)
    termsList.Add(i);

terms = termsList.ToArray();

दूसरा तरीका वर्तमान सरणी का आकार बदल रहा है:

var terms = default(int[]);

for(var i = 0; i < 400; i++)
{
    if(terms == null)
        terms = new int[1];
    else    
        Array.Resize<int>(ref terms, terms.Length + 1);

    terms[terms.Length - 1] = i;
}

यदि आप .NET 3.5 का उपयोग कर रहे हैं Array.Add(...);

ये दोनों आपको गतिशील रूप से करने की अनुमति देंगे। यदि आप बहुत सारे आइटम जोड़ रहे हैं तो बस एक का उपयोग करें List<T>। यदि यह सिर्फ एक-दो आइटम है तो इसमें सरणी को आकार देने वाला बेहतर प्रदर्शन होगा। इसका कारण यह है कि आप List<T>ऑब्जेक्ट बनाने के लिए अधिक हिट लेते हैं ।

टाइम्स टिक में:

3 आइटम

ऐरे आकार का समय: 6

सूची जोड़ें समय: 16

400 आइटम

ऐरे रिसाइज टाइम: 305

सूची जोड़ें समय: 20


1

बस एक अलग दृष्टिकोण:

int runs = 0; 
bool batting = true; 
string scorecard;

while (batting = runs < 400)
    scorecard += "!" + runs++;

return scorecard.Split("!");

3
थोड़े से उपन्यास के दौरान, यह बहुत कड़े संघनन का प्रदर्शन कर रहा है और फिर एक बड़ा संश्लिष्ट संचालन कर रहा है! इस बारे में जाने का सबसे अधिक प्रदर्शन करने वाला, या आसानी से समझने योग्य / आसानी से पढ़ने योग्य तरीका नहीं है।
ब्रैडलीडॉटनेट

@ अल हुमायूं क्या आपने वास्तव =में तुलना ऑपरेटर के बजाय असाइनमेंट ऑपरेटर का उपयोग करने का इरादा किया है ? आप जूझ रहे चर को छोड़ सकते हैं और runs < 400लूप को नियंत्रित करने के लिए उपयोग कर सकते हैं।
स्टीव

सिर्फ प्रोग्रामिंग में डबल प्रवेश करने का अभ्यास
अली हुमायूं

1

एक दृष्टिकोण LINQ के माध्यम से एक सरणी को भरना है

यदि आप एक तत्व को भरना चाहते हैं, तो आप आसानी से लिख सकते हैं

string[] arrayToBeFilled;
arrayToBeFilled= arrayToBeFilled.Append("str").ToArray();

इसके अलावा, यदि आप कई तत्वों के साथ एक सरणी भरना चाहते हैं तो आप पिछले कोड का उपयोग लूप में कर सकते हैं

//the array you want to fill values in
string[] arrayToBeFilled;
//list of values that you want to fill inside an array
List<string> listToFill = new List<string> { "a1", "a2", "a3" };
//looping through list to start filling the array

foreach (string str in listToFill){
// here are the LINQ extensions
arrayToBeFilled= arrayToBeFilled.Append(str).ToArray();
}


0
         static void Main(string[] args)
        {
            int[] arrayname = new int[5];/*arrayname is an array of 5 integer [5] mean in array [0],[1],[2],[3],[4],[5] because array starts with zero*/
            int i, j;


          /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

             /*output each array element value*/
            for (j = 0; j < 5; j++)
            {
                Console.WriteLine("Element and output value [{0}]={1}",j,arrayname[j]);
            }
            Console.ReadKey();/*Obtains the next character or function key pressed by the user.
                                The pressed key is displayed in the console window.*/
        }

0
            /*arrayname is an array of 5 integer*/
            int[] arrayname = new int[5];
            int i, j;
            /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

0

ToArray () पद्धति का उपयोग किए बिना C # का उपयोग करके स्ट्रिंग ऐरे में सूची मान जोड़ने के लिए

        List<string> list = new List<string>();
        list.Add("one");
        list.Add("two");
        list.Add("three");
        list.Add("four");
        list.Add("five");
        string[] values = new string[list.Count];//assigning the count for array
        for(int i=0;i<list.Count;i++)
        {
            values[i] = list[i].ToString();
        }

मूल्य सरणी के आउटपुट में शामिल हैं:

एक

दो

तीन

चार

पांच

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.