Bingo游戏开发:如何从String数组移除List<string>中的指定元素
解决Bingo游戏中移除数组内已选中元素的问题
C#里数组是固定长度的,没法直接删除元素,所以得通过筛选生成新数组或者转成可变集合来处理,给你两种实用方案:
方案一:用LINQ快速筛选(最常用)
先引用System.Linq命名空间,然后一行代码就能生成移除已选数字后的新数组:
// 假设你的原始数字数组是string[] bingoNumbers; // exceptions是存储已选中数字的List<string> string[] filteredNumbers = bingoNumbers.Where(num => !exceptions.Contains(num)).ToArray();
filteredNumbers就是你要的、剔除了已选数字的新数组。
方案二:转成List后批量移除(适合后续还要修改集合的场景)
如果之后需要对数字集合做增删操作,先把数组转成List<string>,再用RemoveAll批量移除匹配元素:
List<string> bingoList = bingoNumbers.ToList(); // 移除所有在exceptions里的元素 bingoList.RemoveAll(num => exceptions.Contains(num)); // 要是需要转回数组,执行下面这句 // string[] filteredNumbers = bingoList.ToArray();
额外优化建议
- 如果数字存在格式差异(比如带空格、大小写不同),可以先统一处理:
string[] filteredNumbers = bingoNumbers .Select(num => num.Trim()) .Where(num => !exceptions.Contains(num, StringComparer.OrdinalIgnoreCase)) .ToArray(); - 要是
exceptions集合里元素很多,转成HashSet<string>能大幅提升查找效率(List的Contains是O(n),HashSet是O(1)):HashSet<string> exceptionSet = new HashSet<string>(exceptions); string[] filteredNumbers = bingoNumbers.Where(num => !exceptionSet.Contains(num)).ToArray();
内容的提问来源于stack exchange,提问作者CSAPawn
相关产品推荐
相关产品推荐

