根据索引在数组中插入空白字符串

本文关键字:插入 空白 字符串 数组 索引 | 更新日期: 2023-09-27 18:00:43

假设我有一个数组,例如

string[] A = {"1","2","3","4","5"}

我希望数组的大小为10,并希望在某个索引后插入空白字符串。

例如,我可以使其大小为10,并在索引3后插入字符串,这将导致

A = {"1","2","3","4","","","","","","5"}

基本上,给定索引之后的元素将被推到末尾,空白字符串将占据中间的空白。

这是我尝试过的,但它只添加了一个字符串,并且没有为数组设置确切的大小

var foos = new List<string>(A);
foos.Insert(33, "");
foos[32] = "";
A = foos.ToArray();

根据索引在数组中插入空白字符串

您可以使用InsertRange

var l = new List<string>{"1","2","3","4","5"};
l.InsertRange(3, new string[10 - l.Count]);
foreach(var i in l)
    Console.WriteLine(i);

注意:上面的内容不是用空字符串填充的,而是用空值填充的,但您可以很容易地修改要用所需默认值填充的new string[]

例如;请参阅如何使用单个值填充/实例化C#数组?

以下是基于LINQ的方法:

public string[] InsertToArray(string[] array, int index, int newArrayCapacity)
{
    var firstPart = array.Take(index + 1);
    var secondPart = array.Skip(index + 1);
    var newPart = Enumerable.Repeat(String.Empty, newArrayCapacity - array.Length);
    return firstPart.Concat(newPart).Concat(secondPart).ToArray();
}

以下是方法的用法:

string[] A = {"1","2","3","4","5"};
// Insert 5 elements (so that A.Length will be 10) in A after 3rd element
var result = InsertToArray(A, 3, 10);


添加:见Sayse的答案,真正的之路

由于数组是固定大小的集合,因此无法调整数组的大小。你需要做的是分割数组元素,你需要获得指定索引之前和之后的元素,你可以通过使用SkipTake方法来做到这一点,然后你需要生成一个空字符串序列并将它们放在一起:

string[] A = {"1","2","3","4","5"};
int index = 3;
var result = A.Take(index + 1)
              .Concat(Enumerable.Repeat("", 10 - A.Length))
              .Concat(A.Skip(index+1))
              .ToArray();

如果你不介意使用列表而不是数组,你可以这样做:

int index = 3;
int numberOfBlanksToInsert = 5;
List<string> strings = new List<string>();
for (int i = 0; i < numberOfBlanksToInsert; i++)
{
    strings.Insert(index, "");
}

完成后,您还可以将其输出到数组:

string[] A = strings.ToArray();
    static string[] InsertRange(string[] initialValues, int startIndex, int count, string toInsert)
    {
        string[] result = new string[initialValues.Length + count];
        for (int i = 0; i < initialValues.Length + count; i++)
            result[i] = i < startIndex ? initialValues[i] : i >= startIndex + count ? initialValues[i - count] : toInsert;
        return result;
    }

用法:InsertRange(A, 4, 5, "hello");

输出:"1,2,3,4,你好,你好,好,你好,5"