Saya tertarik: Apakah analog C # std::pair
dalam C ++? Saya menemukan System.Web.UI.Pair
kelas, tetapi saya lebih suka sesuatu yang berbasis template.
Terima kasih!
c#
.net
data-structures
std-pair
base-class-library
Alexander Prokofyev
sumber
sumber
Jawaban:
Tuples tersedia sejak .NET4.0 dan dukungan generik:
Dalam versi sebelumnya, Anda dapat menggunakan
System.Collections.Generic.KeyValuePair<K, V>
atau solusi seperti berikut:Dan gunakan seperti ini:
Output ini:
Atau bahkan pasangan berantai ini:
Keluaran itu:
sumber
Tuple
. Karena itu Anda dapat mengatakanTuple.Create("Hello", 4)
yang sedikit lebih mudah daripadanew Tuple<string, int>("Hello", 4)
. (Omong-omong, .NET4.0 sudah ada di sini sejak 2010.)Tuple<>
menerapkan solidEquals
danGetHashCode
dengan semantik nilai yang hebat. Perlu diingat saat menerapkan tupel Anda sendiri.System.Web.UI
berisiPair
kelas karena itu banyak digunakan dalam ASP.NET 1.1 sebagai struktur ViewState internal.Pembaruan Agustus 2017: C # 7.0 / .NET Framework 4.7 menyediakan sintaks untuk mendeklarasikan Tuple dengan item bernama menggunakan
System.ValueTuple
struct.lihat MSDN untuk lebih banyak contoh sintaks.
Pembaruan Juni 2012:
Tuples
telah menjadi bagian dari .NET sejak versi 4.0.Berikut ini adalah artikel sebelumnya yang menguraikan inklusi di.NET4.0 dan dukungan untuk obat generik:
sumber
tuple.Item1 = 4;
Sayangnya tidak ada. Anda dapat menggunakannya
System.Collections.Generic.KeyValuePair<K, V>
dalam banyak situasi.Atau, Anda dapat menggunakan jenis anonim untuk menangani tupel, setidaknya secara lokal:
Alternatif terakhir adalah membuat kelas sendiri.
sumber
C # memiliki tupel pada versi 4.0.
sumber
Beberapa jawaban sepertinya salah,
Inilah kelas pasangan saya
Berikut ini beberapa kode tes:
sumber
Jika ini tentang kamus dan sejenisnya, Anda sedang mencari System.Collections.Generic.KeyValuePair <TKey, TValue>.
sumber
Bergantung pada apa yang ingin Anda capai, Anda mungkin ingin mencoba KeyValuePair .
Fakta bahwa Anda tidak dapat mengubah kunci entri tentu saja dapat diperbaiki dengan hanya mengganti seluruh entri dengan contoh baru KeyValuePair.
sumber
Saya membuat implementasi C # dari Tuples, yang memecahkan masalah secara umum untuk antara dua dan lima nilai - inilah posting blog , yang berisi tautan ke sumbernya.
sumber
Saya mengajukan pertanyaan yang sama sekarang setelah google cepat saya menemukan bahwa Ada kelas pasangan di. NET kecuali di System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx ) kebaikan tahu mengapa mereka meletakkannya di sana alih-alih kerangka koleksi
sumber
Sejak .NET 4.0 Anda memiliki
System.Tuple<T1, T2>
kelas:sumber
Saya biasanya memperluas
Tuple
kelas ke bungkus generik saya sendiri sebagai berikut:dan gunakan seperti ini:
sumber
Untuk mendapatkan cara di atas berfungsi (saya membutuhkan pasangan sebagai kunci kamus). Saya harus menambahkan:
dan begitu saya melakukannya saya juga menambahkan
untuk menekan peringatan kompiler.
sumber
Perpustakaan PowerCollections (sebelumnya tersedia dari Wintellect tetapi sekarang di-host di Codeplex @ http://powercollections.codeplex.com ) memiliki struktur Pair generik.
sumber
Terlepas dari kelas kustom atau .Net 4.0 Tuples, karena C # 7.0 ada fitur baru yang disebut ValueTuple, yang merupakan struct yang dapat digunakan dalam kasus ini. Alih-alih menulis:
dan mengakses nilai melalui
t.Item1
dant.Item2
, Anda cukup melakukannya seperti itu:atau bahkan:
sumber