Bagaimana cara menambahkan string ke array string []? Tidak ada fungsi .Tambahkan


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

Saya ingin mengonversi FI.Nameke string dan kemudian menambahkannya ke array saya. Bagaimana saya bisa melakukan ini?

Jawaban:


395

Anda tidak dapat menambahkan item ke array, karena panjangnya telah diperbaiki. Apa yang Anda cari adalah a List<string>, yang nantinya dapat diubah menjadi array menggunakan list.ToArray(), misalnya

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

3
+1 Saya akan melanjutkan dan menawarkan tautan ke jawaban saya tentang hal ini. stackoverflow.com/questions/1168915/…
Sam Harwell

2
"Anda tidak dapat menambahkan item ke array" - sebenarnya Anda bisa, lihat di bawah.
Alex Strickland

112

Atau, Anda dapat mengubah ukuran array.

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

6
Array.Resize adalah cara yang tepat untuk mengubah ukuran array. Jika Anda menambahkan komentar sebelum cuplikan kode yang mengatakan itu jarang cara terbaik untuk menangani situasi di mana array mewakili koleksi resizable Anda mendapat +1. :)
Sam Harwell

12
Sebenarnya, ini adalah (hanya) jawaban yang secara tepat menyelesaikan pertanyaan OP.
Dialex

66

Gunakan Daftar <T> dari System.Collections.Generic

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



myCollection.Add(aString);

Atau, singkatan (menggunakan initialiser koleksi):

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

Jika Anda benar-benar menginginkan sebuah array di akhir, gunakan

myCollection.ToArray();

Anda mungkin lebih baik mengabstraksi ke antarmuka, seperti IEnumerable, lalu hanya mengembalikan koleksi.

Sunting: Jika Anda harus menggunakan array, Anda dapat melakukan praallokasi ke ukuran yang tepat (yaitu jumlah FileInfo yang Anda miliki). Kemudian, di loop foreach, pertahankan counter untuk indeks array yang perlu Anda perbarui berikutnya.

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

Metode saya untuk bergabung hanya menerima larik string [], saya tidak bisa menggunakan Daftar <>. Apakah ada cara bagi saya untuk menyelesaikan ini menggunakan Array?
Sergio Tapia

1
Gunakan Daftar <string> dan kemudian ketika Anda membutuhkan array, panggil metode ToArray
Chris Dunaway

30

mudah

// 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, tidak add.
bigp

9

Jika saya tidak salah itu adalah:

MyArray.SetValue(ArrayElement, PositionInArray)

6

Inilah cara saya menambahkan string ketika dibutuhkan:

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

Mengapa Anda tidak menggunakan for for alih-alih menggunakan foreach. Dalam skenario ini, tidak ada cara Anda bisa mendapatkan indeks iterasi saat ini dari foreach loop.

Nama file dapat ditambahkan ke string [] dengan cara ini,

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

Hanya masalah: Anda HARUS tahu berapa panjang Anda listaDeArchivos. Jika Anda tidak (yaitu jika itu bisa berubah dan akan rumit untuk melakukan penghitungan sebelumnya karena objek Anda adalah model bersarang atau bidang model yang mungkin / mungkin tidak diisi, misalnya) dan Anda hanya ingin melakukan string[] Coleccion;kemudian tetapkan seperti int idx = 0; Coleccion[idx] = fileName; idx++;, itu akan memberi tahu Anda Use of unassigned local variable 'Coleccion'. Hanya FYI bagi siapa pun yang ingin mengadaptasi ini menjadi lebih dinamis, bahwa ada jebakan.
vapcguy

1

Kode ini berfungsi baik untuk menyiapkan nilai dinamis Array untuk pemintal di Android:

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


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

1

untuk menghapus array dan membuat jumlah elemen itu = 0 pada saat yang sama, gunakan ini ..

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

0

Saya tidak akan menggunakan array dalam hal ini. Sebagai gantinya saya akan menggunakan 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"]

Mungkin ide yang baik untuk menjelaskan mengapa array adalah pilihan yang buruk di sini dan OP harus menggunakan Daftar <> untuk memulai.
LueTm

0

Menambahkan referensi ke Linq using System.Linq;dan menggunakan metode ekstensi yang disediakan Append: public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) Maka Anda perlu mengubahnya kembali untuk string[]menggunakan.ToArray() metode tersebut.

Hal ini dimungkinkan, karena jenis string[]alat IEnumerable, juga mengimplementasikan antarmuka berikut: IEnumerable<char>, IEnumerable, IComparable, IComparable<String>, IConvertible, IEquatable<String>,ICloneable

using System.Linq;
public string[] descriptionSet new string[] {"yay"};
descriptionSet = descriptionSet.Append("hooray!").ToArray();  
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.