如何删除数组中的一个元素
本文关键字:一个 元素 数组 何删除 删除 | 更新日期: 2023-09-27 18:03:15
我知道这个主题名称与另一个主题相似,但那个主题没有我想要的答案,所以…
<标题>问题1:假设我有一个数组
string[] test = new string[5];
for(int x = 0; x <= test.Length - 1; x++)
{
test[x] = "#" + (x + 1) + " element";
Console.WriteLine(test[x]);
}
/*
output:
#1 element
#2 element
#3 element
#4 element
#5 element
*/
,然后说我想删除& #4元素"从字符串数组中获取,从而输出:
/*
output:
#1 element
#2 element
#3 element
#5 element
*/
我该怎么做?
[PS:]我正在寻找的答案是一些很容易理解的东西,为初学者
标题>如果您想在特定索引处删除,您可以这样做:
int[] numbers = { 1,2,3,4,5};
List<int> tmp = new List<int>(numbers);
tmp.RemoveAt(4);
numbers = tmp.ToArray();
但是在你的情况下,因为你只是希望元素是不可见的,并且数组长度相同:
string[] test = new string[5];
for(int x = 0; x <= test.Length - 1; x++)
{
if(x!=3){
test[x] = "#" + (x + 1) + " element";
Console.WriteLine(test[x]);}
}
你不能直接从数组中删除一个元素,例如你只能将它设置为""
用List<string>
代替
第一个ans:
你可以使用list,或者如果你不想使用list,可以使用Linq,但它会为数组创建一个不同的内存位置,并将元素存储在那里(我想)。你可以在数组上实现linq,如下所示:
test = test.Where(x => !x.Equals("#4 element")).ToArray();
//Print test Now
,现在测试数组没有"#4元素"。
2日答而不是控制台。WriteLine使用控制台。写。
- 使用
List<string>
而不是数组 - 使用
list.RemoveAt(3)
删除第四个元素(元素从0开始)
因此,为了实现您想要的输出,您可能最终会得到如下内容:
var test = new List<string>();
for (var x = 1; x <= 5; x++)
{
test.Add(String.Format("#{0} element", x));
}
Console.WriteLine(String.Join(" ", test);
test.RemoveAt(3);
Console.WriteLine(String.Join(" ", test);
这将给你你想要的输出:
#1 element #2 element #3 element #4 element #5 element
#1 element #2 element #3 element #5 element
供您编辑。在冲洗o/p时,不要冲洗过时的元素。使用一些条件运算符
如:1。如果您想在阵列阀的基础上删除,则使用
string[] test = new string[5];
for(int x = 0; x <= test.Length - 1; x++)
{
test[x] = "#" + (x + 1) + " element";
If (test[x] == "Desired value which you dont want to show")
Console.WriteLine(test[x]);
}
如果你想根据数组的位置来删除,那么使用
string[] test = new string[5]; for(int x = 0; x <= test.Length - 1; x++) { test[x] = "#" + (x + 1) + " element"; If (x == "Desired index which you dont want to show") Console.WriteLine(test[x]); }
虽然其他人写的是正确的,但有时你有一个数组,你不想有一个List<>
…
public static void Main()
{
string[] test = new string[5];
for(int x = 0; x < test.Length; x++)
{
test[x] = "#" + (x + 1) + " element";
Console.WriteLine(test[x]);
}
Console.WriteLine();
RemoveAt(ref test, 3);
// Or RemoveRange(ref test, 3, 1);
for(int x = 0; x < test.Length; x++)
{
Console.WriteLine(test[x]);
}
}
public static void RemoveAt<T>(ref T[] array, int index)
{
RemoveRange(ref array, index, 1);
}
public static void RemoveRange<T>(ref T[] array, int start, int count)
{
if (array == null)
{
throw new ArgumentNullException("array");
}
if (start < 0 || start > array.Length)
{
throw new ArgumentOutOfRangeException("start");
}
if (count < 0 || start + count > array.Length)
{
throw new ArgumentOutOfRangeException("count");
}
if (count == 0)
{
return;
}
T[] orig = array;
array = new T[orig.Length - count];
Array.Copy(orig, 0, array, 0, start);
Array.Copy(orig, start + count, array, start, array.Length - start);
}
两个简单的方法来删除数组的元素(RemoveAt
和RemoveRange
),并给出了完整的使用示例。
数组有固定的大小,所以如果你想从数组中添加或删除元素,你需要调整大小。因此,在c#中建议使用列表来代替(它们自己处理)。这是一篇关于数组与列表的好文章。
但是如果你真的想用Array来做或者有这样做的理由,你可以这样做:
class Program
{
static void Main(string[] args)
{
int[] myArray = { 1, 2, 3, 4, 5 };
//destination array
int[] newArray = new int[myArray.Length-1];
//index of the element you want to delete
var index = 3;
//get and copy first 3 elements
Array.Copy(myArray, newArray, index);
//get and copy remaining elements without the 4th
Array.Copy(myArray, index + 1, newArray, index, myArray.Length-(index+1));
//Output newArray
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < newArray.Length; i++)
{
sb.Append(String.Format("#{0} {1}", i + 1, newArray[i]));
if (!(i == newArray.Length - 1))
{
sb.Append(", ");
}
}
Console.Write(sb.ToString());
Console.ReadLine();
}
参见我的解决方案…如果有帮助,请告诉我……
class Program
{
// this program will work only if you have distinct elements in your array
static void Main(string[] args)
{
string[] test = new string[5];
for (int x = 0; x <= test.Length - 1; x++)
{
test[x] = "#" + (x + 1) + " element";
Console.WriteLine(test[x]);
}
Console.ReadKey();
Program p = new Program();
test = p.DeleteKey(test, "#3 element"); // pass the array and record to be deleted
for (int x = 0; x <= test.Length - 1; x++)
{
Console.WriteLine(test[x]);
}
Console.ReadKey();
}
public string[] DeleteKey(string[] arr, string str)
{
int keyIndex = 0;
if (arr.Contains(str))
{
for (int i = 0; i < arr.Length - 1; i++)
{
if (arr[i] == str)
{
keyIndex = i; // get the index position of string key
break; // break if index found, no need to search items for further
}
}
for (int i = keyIndex; i <= arr.Length - 2; i++)
{
arr[i] = arr[i+1]; // swap next elements till end of the array
}
arr[arr.Length - 1] = null; // set last element to null
return arr; // return array
}
else
{
return null;
}
}
}