Tuple kelimesi Türkçe’de Demet anlamına gelmektedir. Aşağıdaki açıklamalarda demet ve tuple ifadesi aynı anlamda kullanılmıştır.
C# Tuple Nedir?
<Tuple> sınıfı, .NET Framework 4.0’da tanıtıldı. Tuple, farklı veri türlerinden bir dizi öğe içeren bir veri yapısıdır. Özellikleri olan bir nesneyi tutmak için bir veri yapısına sahip olmak istediğiniz, ancak bunun için ayrı bir tür oluşturmak istemediğiniz yerlerde kullanılabilir.
1 2 3 | Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> |
Aşağıdaki örnek, üç öğeli bir tuple oluşturur:
1 2 3 4 | Tuple<int, string, string> kisi = new Tuple <int, string, string>(1, "Kazım", "Yıldırım"); |
Yukarıdaki örnekte, bir kişinin kaydını tutan bir Tuple örneği oluşturduk. Her eleman için bir tip belirledik ve yapıcıya değerler ilettik. Her öğenin türünü belirtmek zahmetlidir. C#, aşağıda gösterildiği gibi her öğenin türünü belirtmeden Tuple örneğini döndüren statik bir yardımcı sınıf Tuple içerir.
1 2 3 | var kisi = Tuple.Create(1, "Kazım", "Yıldırım"); |
Bir tuple yalnızca en fazla sekiz öğe içerebilir. Sekizden fazla eleman eklemeye çalıştığınızda derleyici hatası veriyor.
1 2 3 | var sayilar = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8); |
Tuple Elemanlarına Erişme
Bir tuple öğesine Item<elementNumara> kullanılanarak erişilebilir, örn. Item1, Item2, Item3 vb. Item7 özelliğine kadar. Item1 özelliği ilk öğeyi, Item2 ikinci öğeyi vb. döndürür. Son eleman (8. eleman), Rest özelliği kullanılarak döndürülecektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | using System; class Program { public static void Main (string[] args) { var kisi = Tuple.Create(1, "Kazım", "Yıldırım"); Console.WriteLine( kisi.Item1); // 1 Console.WriteLine(kisi.Item2); // "Kazım" Console.WriteLine(kisi.Item3); // "Yıldırım" var sayilar = Tuple.Create("Bir", 2, 3, "Dört", 5, "Beş", 7, 8); Console.WriteLine(sayilar.Item1); // "Bir" Console.WriteLine(sayilar.Item2); // 2 Console.WriteLine(sayilar.Item3); // 3 Console.WriteLine(sayilar.Item4); // "Dört" Console.WriteLine(sayilar.Item5); // 5 Console.WriteLine(sayilar.Item6); // "Altı" Console.WriteLine(sayilar.Item7); // 7 Console.WriteLine(sayilar.Rest); // (8) Console.WriteLine(sayilar.Rest.Item1); // 8 Console.ReadKey(); } } |
Kodlar çalıştırıldığında çıktı aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 1 Kazım Yıldırım Bir 2 3 Dört 5 Beş 7 (8) 8 |
Genel olarak, Item 8, Rest özelliğini kullanarak erişebileceğiniz iç içe geçmiş tanımlama grubu içindir.
İç İçe Tuple
Bir tuple sekizden fazla öğe eklemek istiyorsanız, bunu sekizinci öğe olarak başka bir tuple nesnesini iç içe yerleştirerek yapabilirsiniz. Son iç içe geçmiş tuple’a Rest özelliği kullanılarak erişilebilir. Yuvalanmış tanımlama grubunun öğesine erişmek için Rest.Item1.Item1 özelliğini kullanınlır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using System; class Program { public static void Main (string[] args) { var sayilar = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13)); Console.WriteLine( sayilar.Item1); // 1 Console.WriteLine(sayilar.Item7); // 7 Console.WriteLine(sayilar.Rest.Item1); // (8, 9, 10, 11, 12, 13) Console.WriteLine(sayilar.Rest.Item1.Item1); // 8 Console.WriteLine(sayilar.Rest.Item1.Item2); // 9 Console.ReadKey(); } } |
Çıktı:
1 2 3 4 5 6 7 | 1 7 (8, 9, 10, 11, 12, 13) 8 9 |
İç içe geçmiş demet nesnesini sıranın herhangi bir yerine dahil edebilirsiniz. Ancak, Rest özelliği kullanılarak erişilebilmesi için yuvalanmış tanımlama grubunu dizinin sonuna yerleştirmeniz önerilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using System; class Program { public static void Main (string[] args) { var sayilar = Tuple.Create(1, 2, Tuple.Create(3, 4, 5, 6, 7, 8), 9, 10, 11, 12, 13 ); Console.WriteLine( sayilar.Item1 ); // 1 Console.WriteLine( sayilar.Item2 ); // 2 Console.WriteLine( sayilar.Item3 ); // (3, 4, 5, 6, 7, 8) Console.WriteLine( sayilar.Item3.Item1 ); // 3 Console.WriteLine( sayilar.Item4 ); // 9 Console.WriteLine( sayilar.Rest.Item1 ); // 13 Console.ReadKey(); } } |
Çıktı:
1 2 3 4 5 6 7 8 | 1 2 (3, 4, 5, 6, 7, 8) 3 9 13 |