NET是否有与Python的issubset方法等效的方法?

2024-05-16 08:03:33 发布

您现在位置:Python中文网/ 问答频道 /正文

更新:

正如@Blender在Pythonset('aab').issubset(set('abb')) == True中指出的那样。对于我的情况,这需要返回false。需要考虑每个字符的数量。在


基本上我有两个字符串,我想确定其中一个是否是另一个的子集。示例:

String A: abcd
String B: dbace
String A is a subset of string B

字符可以是任何顺序,并且可以有重复的字符数。我试着订购琴弦然后用String.StartsWith,但这在某些情况下不起作用。示例:

^{pr2}$

我环顾了一下,发现Python的issubset方法似乎能满足我的需要,所以我很好奇是否有人在.NET中遇到过它的等价方法(或者有人自己想出的一种有效的方法)。在

注意:我要找的是子集,不是假名。在


Tags: 方法falsetrue示例数量string情况字符
2条回答

据我所知,没有任何内在的东西能像你想要的那样表现。严格地说,这不是一个真正的子集,因为它应该像在Python中那样进行集合比较(在Python中,集合中的每个项目都是唯一的),但是创建一个集合应该很简单。在

public static bool IsSubsetOf<TSource>(this IEnumerable<TSource> lhs, IEnumerable<TSource> rhs)
{
    // O(m+n)
    var contents = rhs.ToList();
    foreach (var item in lhs)
    {
        if (!contents.Remove(item))
            return false;
    }
    return true;
}
^{pr2}$

如果你想要真正的集合机制,它同样简单。在

public static bool IsTrueSubsetOf<TSource>(this IEnumerable<TSource> lhs, IEnumerable<TSource> rhs)
{
    return new HashSet<TSource>(lhs).IsSubsetOf(rhs);
}

我认为最好的解决方案是对它们进行排序,然后用Contains方法检查子集。在

new String(A.OrderBy(o=> o)).Contains(new String(B.OrderBy(o=>o)))

更新:

^{pr2}$

相关问题 更多 >