C# 删除列表中的值<&燃气轮机;在索引位置,不减少列表大小

C# 删除列表中的值<&燃气轮机;在索引位置,不减少列表大小,c#,C#,我正在尝试创建一个结构数组,并从中添加/删除项。试图将其转换为列表,请使用位置本身删除给定索引处的项。 如果我对列表使用RemoveAt(index)方法,它会将列表大小减少一个位置。最后一个数组的大小应与开始时相同 struct Cities { public string name; public int inhabitansNumber; } Cities[] cities = new Cities[500]; // the struct array holding th

我正在尝试创建一个结构数组,并从中添加/删除项。试图将其转换为列表,请使用位置本身删除给定索引处的项。 如果我对列表使用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());
struct城市
{
公共字符串名称;
公共国际电话号码;
}
城市[]城市=新城市[500];//容纳城市的结构数组
int i=0;
//将项目插入阵列:
如果(城市[i].Equals(默认城市)))
{
Console.WriteLine(“请输入城市名称:”);
cities[i].name=Console.ReadLine();
Console.WriteLine(“请输入人口:”);
cities[i].ReshibitansNumber=Convert.ToInt32(Console.ReadLine());
WriteLine(“成功添加值!”);
i++;
}
//从数组中删除值:
WriteLine(“数组{0}中删除前的元素数”,cities.Count());
WriteLine(“请输入要删除的元素的位置:”;
int numToRemove=Convert.ToInt32(Console.ReadLine());
List citiesToList=cities.ToList();
citiesToList.RemoveAt(numToRemove);
cities=citiesToList.ToArray();
WriteLine(“数组{0}中删除后的元素数”,cities.Count());

将元素类型为nullable的数组/列表声明为:

Cities?[] cities = new Cities?[500];
List<Cities?> citiesToList = cities.ToList();

将元素类型为nullable的数组/列表声明为:

Cities?[] cities = new Cities?[500];
List<Cities?> citiesToList = cities.ToList();

如前所述,最好将指定索引上的项设置为
null
,而不是完全删除该项

myArray[itemIndex] = null;
因为您使用的是结构,所以这是不可能的。但也许可以将数组声明为可空。所以只要改变

Cities[] cities = new Cities[500];
以下

Cities?[] cities = new Cities?[500];

如前所述,最好将指定索引上的项设置为
null
,而不是完全删除该项

myArray[itemIndex] = null;
因为您使用的是结构,所以这是不可能的。但也许可以将数组声明为可空。所以只要改变

Cities[] cities = new Cities[500];
以下

Cities?[] cities = new Cities?[500];

找到了仅使用
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());
//从数组中删除项而不删除位置
WriteLine(“数组{0}中删除前的元素数”,cities.Count());
WriteLine(“请输入要删除的元素的位置:”;
int numToRemove=Convert.ToInt32(Console.ReadLine());
对于(int j=0;j=numToRemove)
{
城市[j]=城市[j+1];
}
}
WriteLine(“数组{0}中删除后的元素数”,cities.Count());

找到了只使用
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());
//从数组中删除项而不删除位置
WriteLine(“数组{0}中删除前的元素数”,cities.Count());
WriteLine(“请输入要删除的元素的位置:”;
int numToRemove=Convert.ToInt32(Console.ReadLine());
对于(int j=0;j=numToRemove)
{
城市[j]=城市[j+1];
}
}
WriteLine(“数组{0}中删除后的元素数”,cities.Count());


也许您不想删除该项,但将其设置为
null
?这取决于“大小”的含义。
列表
具有
计数
容量
。如果删除项目,容量不会改变,但计数会改变。如果添加到列表中,容量将发生变化,而且内部缓冲区不够大,无法容纳当前值+1。定义删除的含义可能重复使用
列表
而不是
数组
的意义在于,底层数组的实现细节可以在您不必担心的情况下处理。也许您不想删除该项,但可以将其设置为
null
?这取决于“大小”的含义。
列表
具有
计数
容量
。如果删除项目,容量不会改变,但计数会改变。如果您添加到列表中,容量将发生变化,并且内部缓冲区不够大,无法容纳当前值+1。删除定义的含义可能重复使用
列表
而不是
数组
的意义在于,无需担心即可处理底层数组的实现细节。您好,不幸的是,我在列表中的项目是struct类型,不能为空:)@PopaAlin那么,你说的删除是什么意思?嗨,不幸的是,我在列表中的项目是struct类型,不能为空:)@PopaAlin那么,你说的删除是什么意思?谢谢Benjamin。的确,我想让它可以为null,但我不知道如何在其中放入null值。@PopaAlin:没问题。我很乐意帮助别人。谢谢你,本杰明。的确,我想让它可以为null,但我不知道如何在其中放入null值。@PopaAlin:没问题。我很乐意帮助其他人。那么,当您删除两个或多个项目时会发生什么?如果您删除一个或多个项目,阵列的大小将保持不变。只有元素将被删除。另一方面,如果在列表中对其进行变换,则删除一个元素,然后将其变换回数组,这将减小数组大小。数组是一个元素序列。
列表是一系列项目。如果删除元素或项目,则数组或列表将变短。您的解决方案不会以任何方式更改数组或列表,它只是屏蔽其中一个元素或项。因此,当您删除两个或多个项时会发生什么情况?如果删除一个或多个项,数组的大小将保持不变。只有元素将被删除。另一方面,如果在列表中对其进行变换,则删除一个元素,然后将其变换回数组,这将减小数组大小。数组是一个元素序列。
列表是一系列项目