bool IsSubList(IEnumerable<int> sub, IEnumerable<int> super)
{
var list = super.ToList();
foreach (var item in sub)
{
if (!list.Remove(item))
return false; // not found in list, so sub is not a "sub-list" of super
}
return true; // all elements of sub were found in super
}
var subset = new[] { 9, 3 };
var superset = new[] { 9, 10, 5, 3,1, 3, 3 };
var isSubSet = IsSubList(subset, superset);
4条答案
按热度按时间qnakjoqk1#
我的想法是,你可以按计数对两个集合进行分组,然后测试超级组列表是否包含子组列表中的每个键,并且在每种情况下,超级计数都大于或等于相应的子计数。我认为我已经通过以下方法实现了这一点:
我做了一些额外的测试,它似乎工作,但你可以测试一些额外的数据集,以确保。
gwo2fgha2#
下面是另一个解决方案:
h43kikqp3#
这对我很有效:
rmbxnbpk4#
这不是sets和集合操作的工作方式。集合不能包含重复项。
不应将两个数组视为集合,而应视为(无序的)序列。可能的算法如下:从序列
superset
中制作一个列表,然后从列表中逐个删除序列subset
的每个元素,直到在列表中找不到这样的元素为止。