2011-12-28 109 views
4

我将直接转到这一点。我想以统一的差异移动数组中的项目,假设我有这个。删除阵列中的一个项目并将其他项目向后移动

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

例如,假设我想删除“Apple”,所以我会这样做。

fruits[1] = ""; 

现在所有的左边是:

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

我如何真的除去苹果的部分,只有获得:

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

需要注意的是所有项目从索引“西瓜”直到阵列末端向后移动1。有任何想法吗?

+3

@Morten:请不要建议使用像ArrayList这样的非泛型容器。改为使用通用'List '! – abatishchev 2011-12-28 12:42:19

+0

问题是,这是一个团队合作项目。我的朋友们开始了项目并使用了数组。我不能重新启动项目来将应用程序更改为使用列表。 – 2011-12-28 12:42:40

+0

@MortenAnderson真的没有必要每一次使用ArrayList(除非你使用.NET 1)。 – Ray 2011-12-28 12:43:01

回答

6

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

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

    fruits = fruits.Where(f => f != "Apple").ToArray(); 

如果你不使用一个数组,看List class要求。一个列表允许项目被添加和删除。

+0

Awesome'Wouter de Kort' – Dotnet 2011-12-28 12:42:09

+0

这将删除所有“Apple”的 – Moonlight 2011-12-28 12:43:21

+0

我会试试这个,因为我将只包含一个项目。 – 2011-12-28 12:46:03

9

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

+0

好吧,我的团队已经允许我将数组更改为列表,我将使用它。 – 2011-12-28 13:22:35

2

到沃特的回答类似的,如果你想通过项目索引,而不是项目的值删除,你可以这样做:

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

你可以做这样的事情:

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); 
+0

我知道....其实我的程序是一个最喜欢的水果选择器。我知道水果是不可数的,所以它有另一个阵列。 水果实际上代表水果特别在我的应用程序。 – 2011-12-28 12:47:41

+0

C - :=你知道,30年前我习惯学习英语的时候,我知道这是不可数的。但我刚才查了一下,以确定我不是在说错误的东西,而dictionary.com说复数是成果。所以我不知道这是否是美国习惯用法,(当时我学了英式英语),或者从那以后语言是否改变了。所以,我从我的答案中删除了这部分。 – 2011-12-28 12:51:32

+0

@Naufal:你一定要用'List '! – abatishchev 2011-12-28 12:52:17

1

我认为新程序员可以做的最有用的事情之一是研究和理解各种集合类型。

虽然我认为其他人提到的List选项可能是您正在寻找的内容,但如果您正在进行大量插入和删除操作并且没有大量按索引查找,则值得查看LinkedList类。

0

这是我如何使用列表和数组从数组中删除项目的一个示例。注意我还会告诉你如何使用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 
    } 
相关问题