C#技术问询:如何从List<int>中筛选包含指定数字的元素?
嘿,我来帮你搞定这个筛选包含指定数字x的元素的需求!先给你梳理两种常见的实现方式,还有个小细节要提醒你哦~
实现筛选包含指定数字x的元素
首先要明确:我们要筛选的是数字的某一位包含x的元素(比如x=5时,5、15、50、55这些都符合条件)。下面给你两种实现思路,按需选择。
小细节修正:原代码的随机数范围
先提个小问题:原代码里的rnd.Next(1, 100)其实生成的是1到99的整数(因为Next方法的上限是排他的),如果要覆盖1到100的所有数,得改成rnd.Next(1, 101)哦!
方法一:用LINQ+字符串判断(简洁直观)
这种方式把数字转成字符串,直接检查是否包含x的字符串形式,代码写起来非常简洁,适合日常场景:
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { List<int> Allnumber = new List<int>(); Random rnd = new Random(); // 生成1-100的随机数,直到出现1为止 while (true) { int dice = rnd.Next(1, 101); // 修正范围:包含100 Console.WriteLine("Random number between 1 and 100 : {0}", dice); Allnumber.Add(dice); if (dice == 1) break; } Console.WriteLine(); Console.WriteLine("Allnumber : " + string.Join(" ", Allnumber)); // 原有奇偶筛选逻辑(简化写法) List<int> Odd = Allnumber.Where(n => n % 2 != 0).ToList(); List<int> Even = Allnumber.Where(n => n % 2 == 0).ToList(); Console.WriteLine("\nOdd numbers: " + string.Join(" ", Odd)); Console.WriteLine("Even numbers: " + string.Join(" ", Even)); // 新增:筛选包含指定数字x的元素 int x = 5; // 这里可以替换成你需要的数字,或者让用户输入 List<int> numbersWithX = Allnumber.Where(n => n.ToString().Contains(x.ToString())).ToList(); Console.WriteLine($"\nNumbers containing {x}: " + string.Join(" ", numbersWithX)); } }
方法二:用数值运算判断(无字符串转换,性能更优)
如果处理大量数据,不想用字符串转换的话,可以通过取余和除法逐位检查数字,写个辅助方法就行:
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { List<int> Allnumber = new List<int>(); Random rnd = new Random(); while (true) { int dice = rnd.Next(1, 101); Console.WriteLine("Random number between 1 and 100 : {0}", dice); Allnumber.Add(dice); if (dice == 1) break; } Console.WriteLine(); Console.WriteLine("Allnumber : " + string.Join(" ", Allnumber)); // 奇偶筛选 List<int> Odd = Allnumber.Where(n => n % 2 != 0).ToList(); List<int> Even = Allnumber.Where(n => n % 2 == 0).ToList(); Console.WriteLine("\nOdd numbers: " + string.Join(" ", Odd)); Console.WriteLine("Even numbers: " + string.Join(" ", Even)); // 新增:筛选包含指定数字x的元素 int x = 5; List<int> numbersWithX = Allnumber.Where(n => ContainsDigit(n, x)).ToList(); Console.WriteLine($"\nNumbers containing {x}: " + string.Join(" ", numbersWithX)); } // 辅助方法:判断数字是否包含指定位 static bool ContainsDigit(int number, int digit) { // 特殊处理digit为0的情况(比如数字10包含0) if (digit == 0) { if (number == 0) return true; while (number > 0) { if (number % 10 == 0) return true; number /= 10; } return false; } // 处理digit非0的情况 while (number > 0) { if (number % 10 == digit) return true; number /= 10; } return false; } }
扩展:让用户输入指定数字x
如果想让程序更灵活,可以让用户自己输入要筛选的数字:
// 替换掉原有的x赋值部分 Console.Write("\n请输入要筛选的单个数字(0-9):"); if (int.TryParse(Console.ReadLine(), out int x) && x >= 0 && x <= 9) { List<int> numbersWithX = Allnumber.Where(n => ContainsDigit(n, x)).ToList(); Console.WriteLine($"包含数字{x}的元素:" + string.Join(" ", numbersWithX)); } else { Console.WriteLine("请输入有效的0-9之间的数字哦!"); }
这样用户就能按需筛选任意单个数字啦~
内容的提问来源于stack exchange,提问作者Jungmin Koo
相关产品推荐
相关产品推荐

