如何在C#中模拟元组和集合?

17 投票
3 回答
8899 浏览
提问于 2025-04-15 21:28

我想在C#中使用一些Python的特性,比如元组(Tuples)和集合(Sets)。我需要自己去实现这些功能吗?还是说已经有现成的可以用?有没有人知道.NET语言中有没有动态数据结构的库?

3 个回答

1

如果你正在使用的 .NET Framework 版本比之前提到的要早,Wintellect Power Collections 可能会对你有点帮助。这个库里有 PairTriple,分别用来表示两个和三个元素的组合,还有一些集合类型,比如 Set(集合)、Bag(袋子)和有序的版本。

当然,你也可以自己实现 4.0 版本的 Tuple

(顺便说一下,这些数据结构本身并没有什么特别“动态”的地方。)

3

对于集合来说,HashSet(这是.NET 3.5的一个功能)可以很好地解决这个问题。

关于元组的部分答案:

  • .NET 4.0 提供了对 元组 的一些支持。
  • 早期版本的C#可以使用匿名类型(我记得是在.NET 2.0中引入的,3.0肯定有,和LINQ相关的功能一起出现)。

不过,这两种方法都没有Python那么方便,主要是因为C#是静态类型的语言。尽管如此,C# 4.0的元组类有一些像工厂一样的静态方法,可以让创建元组变得更简单(最多可以创建8个元素的元组)。例如,你可以这样做:

  var customer1 = Tuple.Create("John", "Smith", 14, 5.33, "202-123-444");

使用匿名类型可以这样进行。这个方法的主要缺点是需要明确给“元组”的元素命名(虽然如果初始化时使用的值是从另一个对象“投影”过来的,这个命名可以隐式进行)。

  customer1 = new Customer {
                Name = "John",
                Surname = "Smith",
                NumberOfVisits = 14,
                CurrentBalance = 5.33,
                PhoneNr = "202-123-444"
  };
15

.NET 3.5 版本有一个叫做 HashSet 的东西。

.NET 4.0 版本将会有一个 Tuple 类。文章中提到,早期的 .NET 版本里有一个叫做 KeyValuePair< TKey, TValue > 的东西,它和 Tuple< T1, T2 > 有点像,主要的区别是 KeyValuePair 要求 TKey 是唯一的。

撰写回答