C# 调整阵列大小
这就是我从值类型数组中删除指定元素的全部方法,但它不起作用 我得到了值类型数组的4个元素。我在里面储存了4个不同的数字C# 调整阵列大小,c#,C#,这就是我从值类型数组中删除指定元素的全部方法,但它不起作用 我得到了值类型数组的4个元素。我在里面储存了4个不同的数字 int oldLength = numbers.Length; int[] arrTmp = numbers; numbers = new int[oldLength - 1]; Array.Copy(arrTmp, numbers, Token); Array.Copy(arrTmp, r+1, numbers, Token, oldLen
int oldLength = numbers.Length;
int[] arrTmp = numbers;
numbers = new int[oldLength - 1];
Array.Copy(arrTmp, numbers, Token);
Array.Copy(arrTmp, r+1, numbers, Token, oldLength - Token - 1);
我得到了一个随机类来随机选取一个数字,如果它是2,则必须以升序顺序从数组中移除,每个元素都应该被检查和消除 使用
List l=新列表();
l、 增加(2);
l、 增加(4);
...
l、 移除(2);
如果您确实需要使用普通数组,并使用数组复制其内容。复制
(这在.NET中不是一种常见的处理方式),那么从使用笔开始,然后写下您试图复制的数组部分的正确索引和长度
在知道如何解决之前就开始编写解决方案不会让你走得很远
因此,从一个示例数组和一个随机索引开始:
var newArray = numbers.Where(n=> n!= Token).ToArray();
现在,假设indexToRemove
为3
,并尝试手动执行:
- 第1部分:
(开始={0,1,2}
,长度=0
)3
- 第二部分:
(开始={4,5,6,7}
,长度=4
)4
- 第1部分:开始=
,长度=0
(indexToRemove-1)
- 第2部分:开始=
,长度=(indexToRemove+1)
(array.length-indexToRemove-1)
// starting array
int[] array = { 0, 1, 2, 3, 4, 5, 6, 7 };
// index to remove
int indexToRemove = new Random().Next(array.Length);
此外,Array.Copy
可用于将数组的一部分复制到自身上,这意味着您可以将数组的第二部分向后移动一个位置,然后使用以下命令调整初始数组的大小:
当然,如果您只是使用列表
,那么您只需使用该方法删除该项:
// do not create a new array, but simply "move" the 2nd part to left
Array.Copy(array, indexToRemove + 1, array, indexToRemove, len - indexToRemove - 1);
// finally, resize the original array
Array.Resize(ref array, array.Length - 1);
var list=newlist(){0,1,2,3,4,5,6,7,8};
int indexToRemove=new Random().Next(list.Count);
list.removet(indexToRemove);
这是一般的方法:
var list = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
int indexToRemove = new Random().Next(list.Count);
list.RemoveAt(indexToRemove);
注意到处都使用
r
。此处r
将是要忽略的元素的索引。不使用集合的任何原因?数组具有固定长度,因此“调整大小”涉及实际创建一个新数组并复制元素值。您可以使用Array.Resize(参考号,newLength)来实现这一点
@Jeppe:OP实际上正在创建一个新数组(numbers
)并从源数组(arrTmp
)复制到那里。什么是Token
,什么是r+1
?Token
是原始数组的元素,而r
是其索引吗?
// starting array
int[] array = { 0, 1, 2, 3, 4, 5, 6, 7 };
// index to remove
int indexToRemove = new Random().Next(array.Length);
var len = array.Length;
var newArray = new int[len - 1];
Array.Copy(array, 0, newArray, 0, indexToRemove - 1);
Array.Copy(array, indexToRemove + 1, newArray, indexToRemove, len - indexToRemove - 1);
// do not create a new array, but simply "move" the 2nd part to left
Array.Copy(array, indexToRemove + 1, array, indexToRemove, len - indexToRemove - 1);
// finally, resize the original array
Array.Resize(ref array, array.Length - 1);
var list = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
int indexToRemove = new Random().Next(list.Count);
list.RemoveAt(indexToRemove);
int oldLength = numbers.Length;
int[] arrTmp = numbers;
numbers = new int[oldLength - 1];
Array.Copy(arrTmp, numbers, r);
Array.Copy(arrTmp, r + 1, numbers, r, oldLength - r - 1);