我正在尝试创建一个结构数组,并从中添加/删除项目。试图将其转换为列表,请删除该位置本身在给定索引处的项目。 如果我对列表使用RemoveAt(index)方法,它将以一个位置减小列表大小。最终数组的大小应与开头的大小相同。
struct Cities
{
public string name;
public int inhabitansNumber;
}
Cities[] cities = new Cities[500]; // the struct array holding the cities
int i = 0;
//insert items into the array:
if (cities[i].Equals(default(Cities)))
{
Console.WriteLine("Please enter the city name:");
cities[i].name = Console.ReadLine();
Console.WriteLine("Please enter population:");
cities[i].inhabitansNumber = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Values added successfuly!");
i++;
}
//remove values from the array:
Console.WriteLine("number of element BEFORE deleting in array {0}", cities.Count());
Console.WriteLine("please enter the position of the element that you want to delete:");
int numToRemove = Convert.ToInt32(Console.ReadLine());
List<Cities> citiesToList = cities.ToList();
citiesToList.RemoveAt(numToRemove);
cities = citiesToList.ToArray();
Console.WriteLine("number of element AFTER deleting in array {0}", cities.Count());
答案 0 :(得分:2)
如上所述,最好将指定索引上的项目设置为null
,而不是完全删除该项目。
myArray[itemIndex] = null;
因为您正在使用结构,所以这是不可能的。但是也许您可以将数组声明为可为空。所以只要改变
Cities[] cities = new Cities[500];
到以下
Cities?[] cities = new Cities?[500];
答案 1 :(得分:1)
声明元素类型为可为空的数组/列表:
Cities?[] cities = new Cities?[500];
List<Cities?> citiesToList = cities.ToList();
如果您不想使数组可为空,则可以通过以下方式仅更改列表:
List<Cities?> citiesToList = cities.Cast<Cities?>.ToList();
然后可以使用列表索引器并将元素设置为null:
citiesToList[numToRemove] = null;
答案 2 :(得分:0)
仅使用for
循环找到了解决方案。希望它也可以帮助您:):
//removing item from array without deleting the position
Console.WriteLine("number of element BEFORE deleting in array {0}", cities.Count());
Console.WriteLine("please enter the position of the element that you want to delete:");
int numToRemove = Convert.ToInt32(Console.ReadLine());
for (int j = 0; j < cities.Length-1; j++)
{
if (j >= numToRemove)
{
cities[j] = cities[j + 1];
}
}
Console.WriteLine("number of element AFTER deleting in array {0}", cities.Count());