C# 删除X和Y之间的数组元素

C# 删除X和Y之间的数组元素,c#,arrays,C#,Arrays,如何删除2个数字之间的所有数组元素? 例如:数组是{2,6,3,6,8,2,7,2} 用户写两个数字,比如2和4。 这会导致程序删除第2和第4位置之间的每个数组元素。 在这种情况下,它会删除:3,6,8您不能从数组中删除项。但您可以创建一个新数组,该数组只包含要保留的项。在您的情况下,您可以使用以下选项: int[] array = {2, 6, 3, 6, 8, 2, 7, 2}; array = array.Where((_, i) => i < 2 || i > 4).T

如何删除2个数字之间的所有数组元素? 例如:数组是{2,6,3,6,8,2,7,2} 用户写两个数字,比如2和4。 这会导致程序删除第2和第4位置之间的每个数组元素。
在这种情况下,它会删除:3,6,8

您不能从数组中删除项。但您可以创建一个新数组,该数组只包含要保留的项。在您的情况下,您可以使用以下选项:

int[] array = {2, 6, 3, 6, 8, 2, 7, 2};
array = array.Where((_, i) => i < 2 || i > 4).ToArray();
int[]数组={2,6,3,6,8,2,7,2};
数组=数组。其中((|,i)=>i<2 | | i>4)。ToArray();
顺便说一下,如果使用列表而不是数组,则可以删除项。考虑下面的例子:

List<int> list = new List<int>() {2, 6, 3, 6, 8, 2, 7, 2};

for(int i = 4; i >= 2 ; i--)
{
    list.RemoveAt(i);
}
List List=newlist(){2,6,3,6,8,2,7,2};
对于(int i=4;i>=2;i--)
{
列表。删除(i);
}

对于列表,您可以使用
RemoveRange
来准确地执行此操作。只是需要传递要删除的元素数,而不是(包含)结束索引。因此,对于包含索引
start
end
,它将如下所示:

list.RemoveRange(start, end - start + 1);
对于阵列,您无法真正做到这一点,因为一旦创建阵列,其大小是固定的。如果确实需要数组,可以从数组中创建一个列表,删除项目,然后使用
ToArray

再次创建数组,因为:不能从数组中删除项目。但您可以创建一个新数组,该数组只包含要保留的项。在本例中,我将使用linq,它非常简单:

int[] array = {2, 6, 3, 6, 8, 2, 7, 2};
int x = 2;
int y = 4;

var array1 = array.ToList()
  .Take(x).Concat(array.ToList().Skip(x+y-1))
  .ToArray();


foreach(var i in array1)
{
  Console.Write(i);
  Console.Write(',');
}
结果:

2,6,2,7,2


是数组还是列表?有了一个列表,你就可以找到每一个。或者,如果您可以创建一个新的列表/数组,您可以将linq与skip and take一起使用。你不能调整数组的大小。它是一个数组,但我们不能对数组做任何事情。删除?否。从文档中:“当你将数组强制转换到这些接口之一时,需要注意的关键是,添加、插入或删除元素的成员抛出NotSupportedException。”有很多很好的解决方案,如中所示-应该很容易调整以删除范围而不是单个元素。我认为您的代码没有回答此用户的要求。他说的是数组中的一个值,而不是数组的索引。问题是第二和第四个位置。我认为这些是索引。你的第一个代码工作得很好。你能解释下一行吗?上面的每一行都是做什么的?数组=数组。其中((|,i)=>i<2 | | i>4)。ToArray()<代码>。其中允许您筛选数组中的项目
(|,i)=>i<2 | i>4
是用于指定应允许哪些项目通过的代码
i
在本例中是项目的索引。如果要在lambda表达式中使用项值,可以用任何变量(如
z
)替换
。但是,由于我们不关心过滤器中的项目值,因此我们使用
\uuu
来表示我们不关心它。