我知道这个主题名称与另一个主题类似,但该主题没有我想要的答案,所以......
让我说我有一个阵列:
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
*/
并说我想删除&#34;#4元素&#34;来自字符串数组,因此它输出:
/*
output:
#1 element
#2 element
#3 element
#5 element
*/
我该怎么做?
[PS:]我正在寻找的答案对初学者来说很容易理解。
答案 0 :(得分:1)
如果要删除特定索引,可以执行以下操作:
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]);}
}
答案 1 :(得分:0)
list.RemoveAt(3)
而不是数组。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);
删除第四个元素(元素从0开始)所以你最终会得到类似下面的内容,以达到你想要的输出:
#1 element #2 element #3 element #4 element #5 element
这将为您提供所需的输出:
#1 element #2 element #3 element #5 element
echo $this->Html->css('bootstrap');
echo $this->Html->script('bootstrap');
答案 2 :(得分:0)
您无法从数组中删除元素,例如,您只能将其设置为""
。
改为使用List<string>
。
答案 3 :(得分:0)
第一个答案:
您可以使用列表,或者如果您不想使用列表使用 Linq ,但它会为数组创建不同的内存位置,并将存储元素(我想)。 您可以在数组上实现linq,如下所示:
test = test.Where(x => !x.Equals("#4 element")).ToArray();
//Print test Now
现在测试数组没有“#4元素”。
第二次答案 而不是Console.WriteLine使用Console.Write。
答案 4 :(得分:0)
进行编辑。冲洗你的o / p只是不要冲洗过时的元素。使用一些条件运算符。
例如:1。如果要在阵列阀的基础上移除,请使用
M12=M(:,:,1)>=M(:,:,2);
M13=M(:,:,1)>=M(:,:,3);
M_out(:,:,1)=M12.*M13
M21=M(:,:,2)>M(:,:,1); %"we already set M(p,q,i)=1 then M(p,q,j) must be 0 (j=1..3, j!=i)"
M23=M(:,:,2)>=M(:,:,3);
M_out(:,:,2)=M21.*M23
M31=M(:,:,3)>M(:,:,1);% "we already set M(p,q,i)=1 then M(p,q,j) must be 0 (j=1..3, j!=i)"
M32=M(:,:,3)>M(:,:,2);% "we already set M(p,q,i)=1 then M(p,q,j) must be 0 (j=1..3, j!=i)"
M_out(:,:,3)=M31.*M32
%%Checking
sum(M_out,3)
如果要根据数组位置删除,请使用
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]);
}
答案 5 :(得分:0)
虽然其他人写的是正确的,但有时你有一个数组,而你不想拥有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
)的两种简单方法。
答案 6 :(得分:0)
数组具有固定大小,因此如果您想要添加或删除元素,则需要处理调整大小。因此,在C#中,建议使用Lists(它们自己处理它)。Here是关于Arrays vs Lists的好文章。
但是如果你真的想用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();
}
答案 7 :(得分:0)
请参阅我的解决方案...让我知道是否有帮助...
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;
}
}
}