我正在处理一个项目,我发现很难删除与项目ID相关联的整行,没有用户想要删除。
//a bunch of codes that includes switch and struct statement and a while statement before this snip of code I just pasted
Console.Write("Please enter an item ID No: ");
string id = Console.ReadLine();
int itemidnotodelete = int.Parse(id);
bool iDelete = false;
for (int i = 0; i < ItemCount; i++)
{
if (item[i].itemIDNo == itemidnotodelete)
{
iDelete = true;
//Delete the item if you found it
item[i + 1].itemIDNo = item[i + 1];
//Reset the count to show a new count for your list
ItemCount = ItemCount - 1;
//(Note: your list is now reduced by one item)
我知道你不能从数组中删除。我想转移,如果我找到了用户提供的项ID,我将与该ID相关联的整行(每个id有几列)移动到最后一行,然后我数据中的整列向上移动一行。我的意思是说文字很容易,但我发现很难输入代码。
答案 0 :(得分:1)
答案 1 :(得分:0)
我知道的最快的方法是linq例如:
int[] numbers = { 1, 3, 4, 9, 2 };
int numToRemove = 4;
numbers = numbers.Where(val => val != numToRemove).ToArray();
如果您有其他复杂类型的数组,则只需更改.where语句。
答案 2 :(得分:0)
item[i + 1].itemIDNo = item[i + 1];
我会将其更改为item[i].itemIDNo = item[i + 1];
并将其打包在一个循环中,该循环遍历数组,直到您处于size-1。然后你可以打破。现在oyu应该刚刚覆盖你要删除的数据并将所有其他数据向上移动
答案 3 :(得分:0)
Linq方法
item = item.Where(x => x.itemIDNo == int.Parse(Console.ReadLine())).ToArray();
ItemCount = item.Length; //or better replace ItemCount with item.Length
答案 4 :(得分:0)
这可能不是最佳解决方案,但您可以将阵列复制到另一个阵列中。这样的事情。
int[] items = { 1, 3, 4, 9, 2 };
int[] newItems = new int[items.Length-1];
var itemtodelete = 4;
int itemIndex=-1;
int j = 0, k = 0;
for (int i = 0; i < items.Length; i++)
{
if (items[i] == itemtodelete)
{
itemIndex = i;
break;
}
}
while (j < items.Length - 1)
{
if (k != itemIndex)
{
newItems[j++] = items[k];
}
k++;
}
答案 5 :(得分:0)
这是执行我认为您需要完成的代码。它从数组中删除你的记录,将所有位置移动到一个位置并将你的记录放到数组的末尾。我用了一些你的代码。如果将所有这些都粘贴到您控制台应用程序的“主要”中,它将起作用。这是O(n)时间/ O(n + 1)空间 - 如果您需要证明您选择的算法:)
struct MyWreck
{
public int Id;
public string Desc;
}
static int itemCount = 10;
static MyWreck[] items = new MyWreck[10];
public static void PrepareArray()
{
var seed = 400;
for (var i = 0; i < itemCount; i++)
{
items[i] = new MyWreck { Id = seed + i, Desc = "Description " + i };
}
}
public static void DeleteFromArray()
{
PrepareArray();
Console.Write("Please enter an item ID No: ");
string id = Console.ReadLine();
int itemidnotodelete = int.Parse(id);
bool iDelete = false;
var removedWreck = new MyWreck();
for (int i = 0; i < itemCount; i++)
{
if (items[i].Id == itemidnotodelete)
{
iDelete = true;
removedWreck = items[i];
}
if (iDelete)
{
if (i < itemCount - 1)
{
items[i] = items[i + 1];
}
else
{
items[i] = removedWreck;
}
}
}
}
}