我有一个包含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#中轻松完成吗?先谢谢。
答案 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>
并从那里开始。
有三种方法可以改善这一点:
List<T>
List<T>
与原始数组一起使用List<T>
醇>
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);
这会将您的数据转移到一个位置并删除最后一个条目。数组的大小不会改变。