如何在C#中模拟元组和集合?
我想在C#中使用一些Python的特性,比如元组(Tuples)和集合(Sets)。我需要自己去实现这些功能吗?还是说已经有现成的可以用?有没有人知道.NET语言中有没有动态数据结构的库?
3 个回答
1
如果你正在使用的 .NET Framework 版本比之前提到的要早,Wintellect Power Collections 可能会对你有点帮助。这个库里有 Pair
和 Triple
,分别用来表示两个和三个元素的组合,还有一些集合类型,比如 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" };