我会直截了当地说。我想以一个统一的差异移动数组中的项目,假设我有这个。
string[] fruits = { "Banana", "Apple", "Watermelon", "Pear", "Mango" };
例如,假设我想删除“Apple”,所以我会这样做。
fruits[1] = "";
现在剩下的就是:
{ "Banana", "", "Watermelon", "Pear", "Mango" }
我如何真正删除Apple部分并仅获取:
{ "Banana", "Watermelon", "Pear", "Mango" }
请注意,从“西瓜”到阵列末尾的所有项目的索引向后移动1。有什么想法吗?
答案 0 :(得分:9)
List
课程适合您。它提供了一种方法Remove
,可以自动向后移动以下元素。
答案 1 :(得分:6)
如果您真的想使用Arrays,可以使用Linq过滤列表并转换为数组:
string[] fruits = { "Banana", "Apple", "Watermelon", "Pear", "Mango" };
fruits = fruits.Where(f => f != "Apple").ToArray();
如果您不需要使用阵列,请查看List class。列表允许添加和删除项目。
答案 2 :(得分:2)
与Wouter的答案类似,如果你想按项目索引而不是项目值删除,你可以这样做:
fruits = fruits.Where((s, i) => i != 1).ToArray();
答案 3 :(得分: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 );
答案 4 :(得分:1)
我认为新程序员可以做的最有用的事情之一就是研究和理解各种集合类型。
虽然我认为其他人提到的List选项可能就是你想要的,但是如果你做了大量的插入和删除而不是很多,那么值得查看LinkedList类。通过索引查找。
答案 5 :(得分: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
}
答案 6 :(得分:0)
作为3年前的初学者,我开始制作今天仍在使用的软件。我为游戏的“ PartyMembers”使用了一个数组,今天基本上我很后悔,不得不花大量时间将所有这些硬编码的$#!t转换为一个列表。
举例来说,请尽可能使用列表,以比较方式来构成噩梦。