स्ट्रिंग में तार जोड़ने के लिए कैसे [] सरणी? कोई .Add फ़ंक्शन नहीं है


222
private string[] ColeccionDeCortes(string Path)
{
    DirectoryInfo X = new DirectoryInfo(Path);
    FileInfo[] listaDeArchivos = X.GetFiles();
    string[] Coleccion;

    foreach (FileInfo FI in listaDeArchivos)
    {
        //Add the FI.Name to the Coleccion[] array, 
    }

    return Coleccion;
}

मैं FI.Nameएक स्ट्रिंग में परिवर्तित करना चाहता हूं और फिर इसे मेरे सरणी में जोड़ दूंगा। मैं यह कैसे कर सकता हूँ?

जवाबों:


395

आप किसी सरणी में आइटम नहीं जोड़ सकते, क्योंकि इसकी लंबाई निर्धारित है। आप List<string>जो खोज रहे हैं वह एक है , जिसे बाद में किसी सरणी का उपयोग करके बदल दिया जा सकता है list.ToArray(), जैसे

List<string> list = new List<string>();
list.Add("Hi");
String[] str = list.ToArray();

3
+1 मैं आगे बढ़ता हूँ और इस विषय पर अपने उत्तर के लिए एक लिंक देता हूँ। stackoverflow.com/questions/1168915/…
सैम हरवेल

2
"आप एक सरणी में आइटम नहीं जोड़ सकते हैं" - वास्तव में आप कर सकते हैं, नीचे देखें।
एलेक्स स्ट्रिकलैंड

112

वैकल्पिक रूप से, आप सरणी का आकार बदल सकते हैं।

Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = "new string";

6
Array.Resize है एक सरणी आकार बदलने के लिए उचित तरीके से। यदि आप यह कहते हुए कोड स्निपेट से पहले एक टिप्पणी जोड़ते हैं कि यह शायद ही कभी उन स्थितियों को संभालने का सबसे अच्छा तरीका है जहां सरणी एक resizable संग्रह का प्रतिनिधित्व करता है जो आपको एक +1 मिला है। :)
सैम हार्वेल

12
वास्तव में, यह (केवल) उत्तर है जो ओपी प्रश्न को हल करता है।
डायलाक्स

66

System.Collections.Generic से सूची <T> का उपयोग करें

List<string> myCollection = new List<string>();



myCollection.Add(aString);

या, आशुलिपि (संग्रह आरम्भक का उपयोग करके):

List<string> myCollection = new List<string> {aString, bString}

यदि आप वास्तव में अंत में एक सरणी चाहते हैं, तो उपयोग करें

myCollection.ToArray();

आप इस तरह के IEnumerable के रूप में एक इंटरफेस के लिए अमूर्त से बेहतर हो सकता है, तो बस संग्रह लौट रहा है।

संपादित करें: यदि आपको किसी सरणी का उपयोग करना है , तो आप उसे सही आकार (यानी आपके पास फ़ाइलइन्फो की संख्या) के लिए प्रचार कर सकते हैं। फिर, फ़ॉरेस्ट लूप में, उस सरणी अनुक्रमणिका के लिए एक काउंटर बनाए रखें जिसे आपको अगले अपडेट करने की आवश्यकता है।

private string[] ColeccionDeCortes(string Path)
{
    DirectoryInfo X = new DirectoryInfo(Path);
    FileInfo[] listaDeArchivos = X.GetFiles();
    string[] Coleccion = new string[listaDeArchivos.Length];
    int i = 0;

    foreach (FileInfo FI in listaDeArchivos)
    {
        Coleccion[i++] = FI.Name;
        //Add the FI.Name to the Coleccion[] array, 
    }

    return Coleccion;
}

शामिल होने का मेरा तरीका केवल एक स्ट्रिंग [] सरणी को पुन: प्राप्त करता है, मैं सूची <> का उपयोग नहीं कर सकता। क्या मेरे लिए एरे का उपयोग करके इसे हल करने का कोई तरीका है?
सर्जियो तापिया

1
सूची का उपयोग करें <string> और फिर जब आपको सरणी की आवश्यकता होती है, तो ToArray विधि को कॉल करें
Chris Dunaway

30

Eazy

// Create list
var myList = new List<string>();

// Add items to the list
myList.Add("item1");
myList.Add("item2");

// Convert to array
var myArray = myList.ToArray();

2
* Add, नहीं add
बिग बी


6

यह है कि मैं जरूरत पड़ने पर एक स्ट्रिंग में जोड़ता हूं:

string[] myList;
myList = new string[100];
for (int i = 0; i < 100; i++)
{
    myList[i] = string.Format("List string : {0}", i);
}

3
string[] coleccion = Directory.GetFiles(inputPath)
    .Select(x => new FileInfo(x).Name)
    .ToArray();

3

आप फ़ॉर्च का उपयोग करने के बजाय लूप के लिए उपयोग क्यों नहीं करते हैं। इस परिदृश्य में, कोई तरीका नहीं है जिससे आप फ़ॉरच लूप की वर्तमान पुनरावृत्ति का सूचकांक प्राप्त कर सकते हैं।

फ़ाइल का नाम स्ट्रिंग में जोड़ा जा सकता है [] इस तरह से,

private string[] ColeccionDeCortes(string Path)
{
  DirectoryInfo X = new DirectoryInfo(Path);
  FileInfo[] listaDeArchivos = X.GetFiles();
  string[] Coleccion=new string[listaDeArchivos.Length];

  for (int i = 0; i < listaDeArchivos.Length; i++)
  {
     Coleccion[i] = listaDeArchivos[i].Name;
  }

  return Coleccion;
}

केवल समस्या: आपको पता होना चाहिए कि आपकी लंबाई क्या listaDeArchivosहै। यदि आप नहीं करते हैं (अर्थात यदि यह कभी भी बदल सकता है और समय से पहले एक गिनती करना जटिल होगा, क्योंकि आपकी ऑब्जेक्ट नेस्टेड मॉडल या मॉडल फ़ील्ड हैं जो उदाहरण के लिए / भरे नहीं जा सकते हैं) और आप बस करना चाहते हैं string[] Coleccion;फिर इसे असाइन करें int idx = 0; Coleccion[idx] = fileName; idx++;, यह आपको बताएगा Use of unassigned local variable 'Coleccion'। किसी को भी अधिक गतिशील होने के लिए अनुकूलित करने के लिए बस FYI करें, कि एक नुकसान है।
vapcguy

1

यह कोड एंड्रॉइड में स्पिनर के लिए गतिशील मानों को तैयार करने के लिए बहुत अच्छा काम करता है:

    List<String> yearStringList = new ArrayList<>();
    yearStringList.add("2017");
    yearStringList.add("2018");
    yearStringList.add("2019");


    String[] yearStringArray = (String[]) yearStringList.toArray(new String[yearStringList.size()]);

1

सरणी को खाली करने और एक ही समय में तत्वों = 0 की संख्या बनाने के लिए, इस का उपयोग करें ।।

System.Array.Resize(ref arrayName, 0);

0

मैं इस मामले में एक सरणी का उपयोग नहीं करूंगा। इसके बजाय मैं एक StringCollection का उपयोग करेगा।

using System.Collections.Specialized;

private StringCollection ColeccionDeCortes(string Path)   
{

    DirectoryInfo X = new DirectoryInfo(Path);

    FileInfo[] listaDeArchivos = X.GetFiles();
    StringCollection Coleccion = new StringCollection();

    foreach (FileInfo FI in listaDeArchivos)
    {
        Coleccion.Add( FI.Name );
    }
    return Coleccion;
}

0
string[] MyArray = new string[] { "A", "B" };
MyArray = new List<string>(MyArray) { "C" }.ToArray();
//MyArray = ["A", "B", "C"]

यह समझाने के लिए एक अच्छा विचार हो सकता है कि क्यों एक सरणी यहां एक बुरा विकल्प है और ओपी को सूची <> का उपयोग करना चाहिए।
लीयूट्म

0

लाइनक के लिए एक संदर्भ जोड़ना using System.Linq;और प्रदान की गई विस्तार विधि का उपयोग करें Append: public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) फिर आपको इसे विधि string[]का उपयोग करके वापस बदलने की आवश्यकता है .ToArray()

यह क्योंकि प्रकार संभव है, string[]लागू करता IEnumerableहै, यह भी निम्नलिखित इंटरफेस लागू करता है: IEnumerable<char>, IEnumerable, IComparable, IComparable<String>, IConvertible, IEquatable<String>,ICloneable

using System.Linq;
public string[] descriptionSet new string[] {"yay"};
descriptionSet = descriptionSet.Append("hooray!").ToArray();  
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.