C# 如何根据元素的数量缩小int数组?
假设我有一个包含100个元素的基本C# 如何根据元素的数量缩小int数组?,c#,C#,假设我有一个包含100个元素的基本int[]tab数组。我想使用存储不兼容元素的tmp数组执行Erastotenes的筛选。因为我不知道这个数组中到底有多少个元素,所以我将它声明为newint[100]。但在执行填充任务后,有没有办法缩小该数组?例如,我最终得到的是46个数字而不是100个,因此我想根据所述元素的数量相应地缩小该数组的大小。我希望避免手动调整大小,我更希望通过编程来实现 示例代码: int[] tab = new int[100]; int[] tmp = new
int[]tab
数组。我想使用存储不兼容元素的tmp数组执行Erastotenes的筛选。因为我不知道这个数组中到底有多少个元素,所以我将它声明为newint[100]
。但在执行填充任务后,有没有办法缩小该数组?例如,我最终得到的是46个数字而不是100个,因此我想根据所述元素的数量相应地缩小该数组的大小。我希望避免手动调整大小,我更希望通过编程来实现
示例代码:
int[] tab = new int[100];
int[] tmp = new int[100];
for(int i = 0; i < tab.Length; i++) {
tab[i] = i;
}
publicstaticvoidresize(reft[]?数组,int newSize);
此方法分配具有指定大小的新数组,将元素从旧数组复制到新数组,然后用新数组替换旧数组。数组必须是一维数组。
将一维数组的元素数更改为指定的新大小
您可以不,您不能缩小阵列(或者增长阵列)。您可以创建具有正确大小的新阵列,并将数据复制到新阵列,但阵列一旦创建,就无法更改大小 实现这一点的最简单方法是使用
List
,它只不过是数组上的一个薄包装器,隐藏了底层数组需要如何以及何时增长的所有管道,并将数据从“耗尽”的数组复制到较新的数组
填充列表后,如果需要数组,只需调用
ToArray()
就可以使用列表而不是数组,并使用tab.Add(i);是的,我在其他地方看到过这种解决方案,但我想用标准的int数组来解决。你知道数组最后一个值元素的索引吗?@Steve遗憾的是,不知道,因为它完全取决于tab数组的内容。我必须循环遍历它。那么,当原始数组的元素没有从代码中更改时,您如何区分呢?我的意思是int的默认值是零。零是填充数组的算法的可接受结果吗?谢谢,但我不想使用内置C#方法,我想找出我自己的解决方案。在知道大小后创建一个新数组如何?请记住,实际上Resize
不会调整原始数组的大小。它只是创建一个具有新大小的新文件,并将相关数据从一个文件复制到另一个文件。是的,我知道。在你提到数组中不能在声明之后修改C数组之后,所有的东西都会点击。也许这只是我的C++习惯,实际上可以调整数组的大小。好吧,那样的话,我得按照你的建议去做。谢谢
int[] tab = new int[100];
List<int> tmp = new List<int>();
List<int> se = new List<int>();
for(int i = 0; i < tab.Length; i++)
{
tab[i] = i + 2;
}
se.Add(tab[0]);
se.Add(tab[1]);
for (int i = 2; i < tab.Length; i++)
{
if (tab[i] % 2 == 0 || tab[i] % 3 == 0)
{
if (tmp.IndexOf(tab[i]) == -1)
{
tmp.Add(tab[i]);
}
}
}
int k = 3;
int value;
while(k < tab.Length)
{
if(tmp.IndexOf(tab[k]) == -1) {
value = tab[k];
for (int i = k; i < tab.Length; i++)
{
if(tmp.IndexOf(tab[i]) == -1)
{
if(tab[i] % value == 0 && tab[i] != value)
{
tmp.Add(tab[i]);
}
else
{
if(se.IndexOf(tab[i]) == -1)
{
se.Add(tab[i]);
}
}
}
}
}
k++;
}
Console.WriteLine("Zawartość tablicy początkowej:");
for(int i = 0; i < tab.Length; i++)
{
Console.Write(tab[i] + " ");
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Elementy wykluczone:");
foreach(int t in tmp)
{
Console.Write(t + " ");
}
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Sito Erastotenesa:");
foreach (int s in se)
{
Console.Write(s + " ");
}
Console.WriteLine();
Console.WriteLine();
public static void Resize<T> (ref T[]? array, int newSize);