删除从数组中提供的项目用户

时间:2016-11-18 12:24:42

标签: c#

我正在处理一个项目,我发现很难删除与项目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有几列)移动到最后一行,然后我数据中的整列向上移动一行。我的意思是说文字很容易,但我发现很难输入代码。

6 个答案:

答案 0 :(得分:1)

你是对的,你不能从数组中删除(或者为此添加它)。

正确的解决方案是在需要添加/删除项目时使用另一个容器。

在.NET中添加和删除的最常见容器是List<T>

答案 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;
                    }
                }
            }
        }
    }