2010-04-11 134 views

回答

14

.NET 3.5有HashSet

.NET 4.0將有一個Tuple類。正如文章中指出的那樣,早期版本的.NET確實包含KeyKeyPair < TKey,TValue>,它類似於Tuple < T1,T2>,主要區別在於KeyValuePair要求TKey是唯一的。

+0

「......這就像一個元組」,雖然是隻有2元組。 – Thomas 2010-04-11 14:47:16

+0

@Thomas是的,我打算指定一個2元組。編輯並修復。謝謝。 – 2010-04-12 06:18:53

+0

keyvaluepair永遠不會是一個元組。請編輯它.. – nawfal 2012-03-29 13:23:42

3

對於集合,HashSets(一個.NET 3.5特性)很好地實現了這個技巧。

的部分解答,爲元組:

  • .NET 4.0提供了用於tuples [一些]支持。
  • 早期版本的C#可以使用匿名類型(我認爲在.Net 2.0中引入了3.0,肯定與所有LINQ的東西)。

這兩種方法都不如Python那樣方便;主要障礙來自於C#是靜態類型的事實。然而,C#4.0 Tuple類具有類似工廠的靜態方法,這些方法可以更容易地創建元組(最多8元組,即具有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" 
    }; 
+1

@mjv:C#是一個更*靜態*類型的語言。 C#和Python都是強類型的。 – quamrana 2010-04-11 09:27:47

+0

@quamrana:很對。我正是這個意思;現在編輯相應。在C#3.0/.NET 3.5中添加了 – mjv 2010-04-11 14:40:48

+0

匿名類型。 .NET 3.0只是BCL的東西沒有改變的語言 – 2011-08-19 11:34:29

1

如果您之前使用.NET Framework進行工作,Wintellect Power Collections可能會引起某些興趣 - 它具有2元和3元組的PairTriple以及兩個集合,如Set,BagOrdered

當然,沒有什麼能阻止你實施4.0的Tuple你自己。

(順便說一下,沒有什麼特別的「動態」關於像這樣在自己和數據結構)