如何提取DataGridView列数字列表中的唯一值?求解DistinctBy的Function(X)
帮你理清Lambda表达式和找到唯一数字的方法
嘿,我来拆解你遇到的问题,一步步说清楚:
先解释Function(X) X.muNumber是什么
你看到的Function(X) X.muNumber是VB.NET里的Lambda表达式,简单说就是一段临时的小函数:
X是个临时变量名,代表集合mynumber里的每一个元素(换成item、row这类名字也完全不影响功能,只是个代号而已);- 整个表达式的意思是:“告诉
DistinctBy方法,你要以每个元素的muNumber属性作为判断重复的标准”。
不过要提醒你:这段DistinctBy代码其实不适合你的场景——它只是把重复的元素去重后保留一个,但没法直接找出只出现过一次的那个唯一数字,毕竟你的需求里是只有一个数不重复,其他都至少重复两次对吧?
适合你场景的解决方案
针对“仅一个数字唯一,其余均重复”的情况,用分组统计的方式更准确,给你写个适合VB.NET的完整示例:
' 第一步:从DataGridView的目标列提取所有有效数字(这里假设列名是"muNumber",根据你的实际情况改) Dim numberList = DataGridView1.Rows.Cast(Of DataGridViewRow)() .Where(Function(row) Not row.IsNewRow) ' 排除空的新行 .Select(Function(row) Convert.ToInt32(row.Cells("muNumber").Value)) ' 转成整数 .ToList() ' 第二步:找出唯一的那个数字 Dim uniqueNumber = numberList.GroupBy(Function(num) num) ' 按数字分组,相同数字在一组 .Where(Function(group) group.Count() = 1) ' 筛选出只有1个元素的组 .Select(Function(group) group.Key) ' 取出组对应的数字 .FirstOrDefault() ' 因为你说只有一个唯一值,直接取第一个就行 ' 验证结果 If uniqueNumber IsNot Nothing Then ' 这里可以换成你需要的操作,比如输出到界面 MessageBox.Show($"找到唯一的数字啦:{uniqueNumber}") End If
这段代码的逻辑拆解:
- 先把DataGridView里的有效行数据转成整数列表,避免处理空行或非数字内容;
- 用
GroupBy把相同的数字归为一组; - 筛选出元素数量为1的组(也就是那个只出现一次的数字);
- 取出这个组对应的数字,就是你要找的唯一值。
内容的提问来源于stack exchange,提问作者Ed Jenkins
相关产品推荐
相关产品推荐

