从数组中删除一项并向后移动其他项

本文关键字:移动 其他 一项 删除 数组 | 更新日期: 2023-09-27 18:19:07

我就开门见山了。我想把数组里的元素移动到一个统一的位置,比如我有这个

string[] fruits = { "Banana", "Apple", "Watermelon", "Pear", "Mango" };

例如,假设我想删除"Apple",那么我将这样做。

fruits[1] = "";

现在剩下的都是:

{ "Banana", "", "Watermelon", "Pear", "Mango" }

我如何真正删除Apple部分而只得到:

{ "Banana", "Watermelon", "Pear", "Mango" }

注意,从"西瓜"到数组末尾的所有项的索引向后移动1。什么好主意吗?

从数组中删除一项并向后移动其他项

List类是适合您的。它提供了一个方法Remove,可以自动向后移动以下元素。

如果你真的想使用数组,你可以使用Linq来过滤列表并转换为数组:

  string[] fruits = { "Banana", "Apple", "Watermelon", "Pear", "Mango" };
  fruits = fruits.Where(f => f != "Apple").ToArray();

如果不需要使用数组,请查看List类。列表允许添加和删除项。

与Wouter的回答类似,如果您希望按条目索引而不是条目值删除,您可以这样做:

fruits = fruits.Where((s, i) => i != 1).ToArray();

你可以这样做:

for( int i = 1;  i + 1 < fruits.Length;  i++ )
    fruits[i] = fruits[i + 1];
fruits = System.Array.Resize( fruits, fruits.Length - 1 );

如果你不关心数组中水果的顺序,一个更聪明的方法是:

fruits[1] = fruits[fruits.Length - 1];
fruits = System.Array.Resize( fruits, fruits.Length - 1 );

我认为一个新程序员能做的最有用的事情之一就是学习和理解各种集合类型。

虽然我认为其他人提到的列表选项可能是你正在寻找的,如果你要做很多插入和删除,而不是通过索引查找很多,那么值得看看LinkedList类。

这是我如何使用列表和数组从数组中删除项的一个示例。注意,我还向您展示了如何使用linq搜索一个充满要删除的坏名字的数组。希望这能帮助到一些人。

public static void CheckBadNames(ref string[] parts)
    {
        string[] BadName = new string[] {"LIFE", "ESTATE" ,"(",")","-","*","AN","LIFETIME","INTREST","MARRIED",
                                         "UNMARRIED","MARRIED/UNMARRIED","SINGLE","W/","/W","THE","ET",
                                         "ALS","AS", "TENANT" };
        List<string> list = new List<string>(BadName); //convert array to list
        foreach(string part in list)
        {
            if (BadName.Any(s => part.ToUpper().Contains(s)))
            {
                list.Remove(part);
            }
        }
        parts = list.ToArray(); // convert list back to array
    }

3年前,作为一个初学者,我开始制作我今天仍在工作的软件。我使用了一个数组来表示游戏的"PartyMembers",今天我很后悔这么做,不得不花大量的时间来转换这些硬编码的$#!T变成一个列表。

举例来说,如果可以的话就使用列表,数组比较起来简直就是噩梦。