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

标签 .net python set

更新:

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


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

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

字符可以采用任意顺序,并且可以有重复的字符数。我曾尝试对字符串进行排序,然后使用 String.StartsWith,但这在某些情况下不起作用。示例:

String A: abcdd
string B: abbcdd
Ordering these and using StartsWith returns false because string B has two "b"s

我环顾四周,发现 Python 的 issubset 方法似乎可以满足我的要求,所以我很好奇是否有人在 .NET 中遇到过它的等效方法(或者有人自己提出的有效方法) .

注意:我正在寻找子集,而不是字谜。

最佳答案

据我所知,没有任何内置功能可以按照您的要求运行。严格来说,这不是一个真正的子集,因为它应该像在 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;
}
"aab".IsSubsetOf("abb");      // false
"foo".IsSubsetOf("food");     // true
"foo".IsSubsetOf("goof");     // true
"bar".IsSubsetOf("barf");     // true
"abcd".IsSubsetOf("dbace");   // true
"abcdd".IsSubsetOf("abbcdd"); // true

如果您想要真正的设定机制,那就同样简单。

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

关于.net - .NET 是否有与 Python 的 issubset 方法等效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10662509/

相关文章:

c# - 在没有 toUpper/toLower 的情况下大写/小写字符串的最有效方法

c# - 为什么 BCL 中没有 AutoResetEventSlim?

python - 显示弹出消息 OpenERP V6

Python 3.x 无法将 Decimal() 序列化为 JSON

swift - 在 Swift 中打印 Set 的一个元素

java - 根据属性保留对象的 SortedSet

c# - 来自动态代码的异常堆栈跟踪中的文件路径和行号错误

.Net 使用反射来定义 OfType

Python:回答终端提示

python - 如何使用 set 维护列表的顺序?