将列添加到字符串数组

时间:2014-07-14 15:03:33

标签: c#

我有一个包含125列的字符串数组:

string[] arrColumns = null;
...populate array here
field0 = arrColumns[0];
field1 = arrColumns[1];
...etc to 124
...modify array here to add a new column to the beginning of the string array

我需要在数组的开头添加一个新列。

将arrColumns [0]移动到arrColumns [1];等等 然后我将有一个新列arrColumns [0]来添加数据。 这可以在C#中轻松完成吗?先谢谢。

3 个答案:

答案 0 :(得分:2)

与您所描述的最接近的方法是使用Array.Copy方法:

string[] arrColumns = new string[1024];
string[] newArray = new string[arrColumns.Length + 1];

Array.Copy(arrColumns, 0, newArray, 1, arrColumns.Length);
newArray[0] = "Hello, world!

这有点长,特别是如果你继续这样做。更好的选择是不要担心复制和在第一个位置插入值的细节,使用List<T>并从那里开始。

有三种方法可以改善这一点:

  1. 使用容量为List<T>
  2. List<T>与原始数组一起使用
  3. 从现有数组
  4. 创建List<T>

    使用容量<{h3>的List<T>

    使用接受构造函数中的容量的List<string>,以便在要创建的大小上给它一个抬头(如果可能)。

    然后它将在内部分配初始大小,但仍然知道.Count中存储的项目数,而不是.Capacity。它也在动态扩展:

    List<string> listOfColumns = new List<string>(1024); // Set initial capacity
    listOfColumns.Add( .... );
    

    List<T>与原始数组

    一起使用

    另一种方法是直接将数组传递给构造函数,并且可以使用重载来传递现有数组:

    List<string> listOfColumns = new List<string>(arrColumns);
    

    从现有数组

    创建List<T>

    使用System.Linq扩展程序自动创建List<T>

    List<string> listOfColumns = arrColumns.ToList();
    

    然后您可以将项目插入列表的开头。

    listOfColumns.Insert(0, "Hello, World!");
    

    要将数据作为数组获取,请使用.ToArray()方法。

    string[] arrColumns = listOfColumns.ToArray();
    

答案 1 :(得分:0)

您可以复制到List<string> ...

string[] strArray = new string[99];
strArray[0] = "1";
strArray[1] = "2";
strArray[2] = "3";

var strList = new List<string>();
strList.Add("0");
strList.AddRange(strArray.Where(a => !string.IsNullOrWhiteSpace(a)));

这将创建一个新列表,其中包含您在第一个位置添加的任何内容,然后添加元素不为空的数组中的记录。

答案 2 :(得分:0)

如果它应该是一个数组,你可以使用这个

// Create a temporary array
string[] tmp = (string[])arrColumns.Clone();

// Take the first items and copy to temp
arrColumns.Take(arrColumns.Length-1).ToArray().CopyTo(tmp, 1);

// Add new element at position 0
tmp[0] = "New";

// Copy back
tmp.CopyTo(arrColumns);

这会将您的数据转移到一个位置并删除最后一个条目。数组的大小不会改变。