vb.net - VB.NET比较2个不同长度的字符串列表以获得相同的匹配,列表将有重复的值,List1需要List2中的所有内容
问题描述
Vb.Net 检查 2 个不同长度的加扰字符串列表是否匹配相同的值,两个列表可能有重复的重复值,需要考虑这些值。List1 需要具有与 List2 中相同的值计数。两个列表都将始终具有值,并且 List1 将始终大于或等于 List2 的大小,永远不会小于 List2。
示例 = True - 因为 List2 调用了 F100 和 F200,而它们在 List1 中。
列表1 = (F100, F200, F300, F400)
列表 2 = (F100, F200)
Example = False - 因为 List1 没有 F200 的数量 2,它只有 F200 出现一次。
列表1 = (F100, F200, F300, F100)
列表 2 = (F100, F200, F200)
示例 = True - 因为 List1 的数量为 2,即 F100、F200 和 F300。List1 有额外的项目,这很好。
列表1 = (F300, F200, F100,F300, F200,F100, F400, F500, F600)
列表2 = (F100, F200, F300, F100, F200, F300)
如果 List1 没有与 List2 内的所有内容匹配,我希望将布尔值设置为 false。我的示例代码如下,但它不适用于重复值。
Dim lot_equal As Boolean = True
For Each difference In List2.Except(List1)
lot_equal = False
Next
解决方案
可以用 LINQ 做到这一点
<Extension()>
Function IsIn(Of T)(list2 As List(Of T), list1 As List(Of T)) As Boolean
Dim d1 = list1.GroupBy(Function(x) x).ToDictionary(Function(g) g.Key, Function(g) g.Count())
Return list2.GroupBy(Function(x) x).All(Function(g) d1.ContainsKey(g.Key) AndAlso d1(g.Key) >= g.Count())
End Function
它是如何工作的?
将第一个列表变成字典,将一个数字映射到它出现的次数(因此List1 = (F100, F200, F300, F400)
变成一个包含 4 个条目的字典,每个条目计数 1)
然后它按条目对第二个列表进行分组,并询问 a) 是否所有键都在第一个列表中,以及 b) 第一个列表的计数是否等于或大于第二个列表的计数。
也可以通过 Lookup 来完成:
<Extension()>
Function IsIn(Of T)(list2 As List(Of T), list1 As List(Of T)) As Boolean
Dim lu = list1.ToLookup(Function(x) x)
Return list2.GroupBy(Function(x) x).All(Function(g) lu(g.Key).Count >= g.Count())
End Function
..它有一个很好的工具,你不需要先查询键的存在——调用不存在的键查找会产生一个空序列。
..但它们比字典少见,所以它有点“嗯?这是做什么的?”
通过使其成为扩展,您可以以非常自然的方式调用它:
Dim result = list2.IsIn(list1)
推荐阅读
- jmeter - Jmeter - Perfmon 摘要报告
- database - 如何在不知道过程参数的情况下获取 Amazon Redshift 中存储过程的完整 ddl 脚本
- elasticsearch - 在从 Fluentd 推送日志时在 Elasticsearch 索引中添加自定义字段
- reactjs - 在 mqtt 套接字上接收数据时,我想在 ReactNative 中重新渲染特定组件
- android - 引起:java.lang.ArrayIndexOutOfBoundsException: length=0; 索引=0
- c# - C# Azure 函数和旧版 DLL
- sql - 数字列上的动态多个 PIVOT
- c++ - 如何从 C++ 中的函数返回不同的类型?
- php - Laravel - 方法 Illuminate\Support\Collection::select 不存在
- python - 如何在单个 for 循环中遍历两个字符串列表?