如何在C#中从数组移除指定字符串?实现物品售卖功能
在C#中无需指定索引,从字符串数组移除指定元素
C#里的数组是固定长度的,没法直接删除元素,所以得换个思路实现你的需求,下面给两种实用方案:
方案一:改用List<string>(推荐,更适合背包这种动态增减的场景)
把原来的数组换成List<string>,它自带的Remove()方法可以直接传入要移除的字符串,不用管索引。如果背包里可能有多个相同物品,用RemoveAll()可以一次性删完所有匹配项。
修改你的代码示例:
long balance = 100; // 把数组改成List,支持动态修改 List<string> inventory = new List<string> {"Carp", "Laptop", "Mobile"}; Console.WriteLine("What do you want to sell?"); string sellingItem = Console.ReadLine(); // 先判断物品是否存在于背包 if (inventory.Contains(sellingItem)) { Console.WriteLine($"Selling {sellingItem}"); // 用字典存物品对应价格,避免硬编码判断不同物品的售价 var itemPrices = new Dictionary<string, long> { {"Carp", 15}, {"Laptop", 500}, {"Mobile", 300} }; balance += itemPrices[sellingItem]; // 移除指定物品(只删第一个匹配项) inventory.Remove(sellingItem); // 如果要移除所有相同物品,替换成下面这句: // inventory.RemoveAll(item => item.Equals(sellingItem)); } else { Console.WriteLine("You don't have this item!"); } // 输出测试结果 Console.WriteLine($"Current balance: {balance}"); Console.WriteLine("Remaining inventory: " + string.Join(", ", inventory));
方案二:保留数组,用LINQ创建新数组
如果一定要用数组,可以通过LINQ的Where()方法过滤掉要移除的元素,生成一个新数组。注意这是创建新数组,原数组不会被修改。
示例代码:
long balance = 100; string[] inventory = {"Carp", "Laptop", "Mobile"}; Console.WriteLine("What do you want to sell?"); string sellingItem = Console.ReadLine(); if (inventory.Contains(sellingItem)) { Console.WriteLine($"Selling {sellingItem}"); balance += 15; // 同样建议用字典统一管理物品价格 // 过滤掉要移除的物品,生成新数组 inventory = inventory.Where(item => !item.Equals(sellingItem)).ToArray(); } // 输出测试结果 Console.WriteLine($"Balance: {balance}"); Console.WriteLine("Inventory: " + string.Join(", ", inventory));
补充说明
- 方案一更适合背包场景,因为List支持动态添加/删除,后续扩展捡物品、批量操作等功能更方便。
- 方案二适合必须用数组的场景,但每次修改都要创建新数组,性能和灵活性不如List。
内容的提问来源于stack exchange,提问作者Itsmemonzu
相关产品推荐
相关产品推荐

