Tuple<T1,T2> クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
2 タプル、すなわちペアを表します。
generic <typename T1, typename T2>
public ref class Tuple : IComparable, System::Collections::IStructuralComparable, System::Collections::IStructuralEquatable
generic <typename T1, typename T2>
public ref class Tuple : IComparable, System::Collections::IStructuralComparable, System::Collections::IStructuralEquatable, System::Runtime::CompilerServices::ITuple
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable, System.Runtime.CompilerServices.ITuple
[System.Serializable]
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
type Tuple<'T1, 'T2> = class
interface IStructuralComparable
interface IStructuralEquatable
interface IComparable
type Tuple<'T1, 'T2> = class
interface IStructuralComparable
interface IStructuralEquatable
interface IComparable
interface ITuple
[<System.Serializable>]
type Tuple<'T1, 'T2> = class
interface IStructuralEquatable
interface IStructuralComparable
interface IComparable
[<System.Serializable>]
type Tuple<'T1, 'T2> = class
interface IStructuralEquatable
interface IStructuralComparable
interface IComparable
interface ITuple
Public Class Tuple(Of T1, T2)
Implements IComparable, IStructuralComparable, IStructuralEquatable
Public Class Tuple(Of T1, T2)
Implements IComparable, IStructuralComparable, IStructuralEquatable, ITuple
型パラメーター
- T1
組の 1 番目のコンポーネントの型。
- T2
組の 2 番目のコンポーネントの型。
- 継承
-
Tuple<T1,T2>
- 属性
- 実装
注釈
タプルは、特定の数と値のシーケンスを持つデータ構造です。 このクラスは Tuple<T1,T2> 、2 つのコンポーネントを持つタプルである 2 タプルまたはペアを表します。 2 タプルは構造体に KeyValuePair<TKey,TValue> 似ています。
コンストラクターまたは静的Tuple.Create<T1,T2>(T1, T2)メソッドをTuple<T1,T2>呼び出Tuple<T1,T2>すことによって、オブジェクトをインスタンス化できます。 タプルのコンポーネントの値は、読み取り専用 Item1 プロパティと Item2 インスタンス プロパティを使用して取得できます。
タプルは、通常、次の 4 つの異なる方法で使用されます。
1 つのデータ セットを表す。 たとえば、タプルはデータベース内のレコードを表し、そのコンポーネントはそのレコードのフィールドを表すことができます。
データ セットへの簡単なアクセスと操作を提供します。 次の例では、学生の Tuple<T1,T2> 名前とそれに対応するテスト スコアを含むオブジェクトの配列を定義します。 次に、配列を反復処理して、平均テスト スコアを計算します。
using System; public class Example { public static void Main() { Tuple<string, Nullable<int>>[] scores = { new Tuple<string, Nullable<int>>("Jack", 78), new Tuple<string, Nullable<int>>("Abbey", 92), new Tuple<string, Nullable<int>>("Dave", 88), new Tuple<string, Nullable<int>>("Sam", 91), new Tuple<string, Nullable<int>>("Ed", null), new Tuple<string, Nullable<int>>("Penelope", 82), new Tuple<string, Nullable<int>>("Linda", 99), new Tuple<string, Nullable<int>>("Judith", 84) }; int number; double mean = ComputeMean(scores, out number); Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number); } private static double ComputeMean(Tuple<string, Nullable<int>>[] scores, out int n) { n = 0; int sum = 0; foreach (var score in scores) { if (score.Item2.HasValue) { n += 1; sum += score.Item2.Value; } } if (n > 0) return sum / (double) n; else return 0; } } // The example displays the following output: // Average test score: 87.71 (n=7)
open System let scores = [| Tuple<string, Nullable<int>>("Jack", 78) Tuple<string, Nullable<int>>("Abbey", 92) Tuple<string, Nullable<int>>("Dave", 88) Tuple<string, Nullable<int>>("Sam", 91) Tuple<string, Nullable<int>>("Ed", Nullable()) Tuple<string, Nullable<int>>("Penelope", 82) Tuple<string, Nullable<int>>("Linda", 99) Tuple<string, Nullable<int>>("Judith", 84) |] let computeMean (scores: Tuple<string, Nullable<int>>[]) (n: int outref) = n <- 0 let mutable sum = 0 for _, score in scores do if score.HasValue then n <- n + 1 sum <- sum + score.Value if n > 0 then double sum / double n else 0 let mutable number = 0 let mean = computeMean scores &number printfn $"Average test score: {mean:N2} (n={number})" // The example displays the following output: // Average test score: 87.71 (n=7)
Module Example Public Sub Main() Dim scores() As Tuple(Of String, Nullable(Of Integer)) = { New Tuple(Of String, Nullable(Of Integer))("Jack", 78), New Tuple(Of String, Nullable(Of Integer))("Abbey", 92), New Tuple(Of String, Nullable(Of Integer))("Dave", 88), New Tuple(Of String, Nullable(Of Integer))("Sam", 91), New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing), New Tuple(Of String, Nullable(Of Integer))("Penelope", 82), New Tuple(Of String, Nullable(Of Integer))("Linda", 99), New Tuple(Of String, Nullable(Of Integer))("Judith", 84) } Dim number As Integer Dim mean As Double = ComputeMean(scores, number) Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number) End Sub Private Function ComputeMean(scores() As Tuple(Of String, Nullable(Of Integer)), ByRef n As Integer) As Double n = 0 Dim sum As Integer For Each score In scores If score.Item2.HasValue Then n += 1 sum += score.Item2.Value End If Next If n > 0 Then Return sum / n Else Return 0 End If End Function End Module ' The example displays the following output: ' Average test score: 87.71 (n=7)
パラメーター (C# の場合) または
ByRef
パラメーター (Visual Basic) を使用out
せずにメソッドから複数の値を返す場合。 たとえば、次の例では、オブジェクトを Tuple<T1,T2> 使用して商と整数除算の結果の剰余を返します。using System; public class Class1 { public static void Main() { int dividend, divisor; Tuple<int, int> result; dividend = 136945; divisor = 178; result = IntegerDivide(dividend, divisor); if (result != null) Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2); else Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor); dividend = Int32.MaxValue; divisor = -2073; result = IntegerDivide(dividend, divisor); if (result != null) Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2); else Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor); } private static Tuple<int, int> IntegerDivide(int dividend, int divisor) { try { int remainder; int quotient = Math.DivRem(dividend, divisor, out remainder); return new Tuple<int, int>(quotient, remainder); } catch (DivideByZeroException) { return null; } } } // The example displays the following output: // 136945 \ 178 = 769, remainder 63 // 2147483647 \ -2073 = -1035930, remainder 757
open System let integerDivide (dividend: int) divisor = try let quotient, remainder = Math.DivRem(dividend, divisor) Tuple<int, int>(quotient, remainder) with :? DivideByZeroException -> Unchecked.defaultof<Tuple<int, int>> [<EntryPoint>] let main _ = let dividend = 136945 let divisor = 178 let result = integerDivide dividend divisor if box result <> null then printfn $@"{dividend} \ {divisor} = {result.Item1}, remainder {result.Item2}" else printfn $@"{dividend} \ {divisor} = <Error>" let dividend = Int32.MaxValue let divisor = -2073 let result = integerDivide dividend divisor if box result <> null then printfn $@"{dividend} \ {divisor} = {result.Item1}, remainder {result.Item2}" else printfn $@"{dividend} \ {divisor} = <Error>" 0 // The example displays the following output: // 136945 \ 178 = 769, remainder 63 // 2147483647 \ -2073 = -1035930, remainder 757
Module modMain Public Sub Main() Dim dividend, divisor As Integer Dim result As Tuple(Of Integer, Integer) dividend = 136945 : divisor = 178 result = IntegerDivide(dividend, divisor) If result IsNot Nothing Then Console.WriteLine("{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2) Else Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor) End If dividend = Int32.MaxValue : divisor = -2073 result = IntegerDivide(dividend, divisor) If result IsNot Nothing Then Console.WriteLine("{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2) Else Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor) End If End Sub Private Function IntegerDivide(dividend As Integer, divisor As Integer) As Tuple(Of Integer, Integer) Try Dim remainder As Integer Dim quotient As Integer = Math.DivRem(dividend, divisor, remainder) Return New Tuple(Of Integer, Integer)(quotient, remainder) Catch e As DivideByZeroException Return Nothing End Try End Function End Module ' The example displays the following output: ' 136945 \ 178 = 769, remainder 63 ' 2147483647 \ -2073 = -1035930, remainder 757
1 つのパラメーターを使用してメソッドに複数の値を渡す。 たとえば、 Thread.Start(Object) このメソッドには、起動時にスレッドが実行するメソッドに 1 つの値を指定できる 1 つのパラメーターがあります。 メソッド引数としてオブジェクトを Tuple<T1,T2> 指定する場合は、スレッドのスタートアップ ルーチンに 2 つのデータ項目を指定できます。
コンストラクター
Tuple<T1,T2>(T1, T2) |
Tuple<T1,T2> クラスの新しいインスタンスを初期化します。 |
プロパティ
Item1 |
現在の Tuple<T1,T2> オブジェクトの 1 番目のコンポーネントの値を取得します。 |
Item2 |
現在の Tuple<T1,T2> オブジェクトの 2 番目のコンポーネントの値を取得します。 |
メソッド
Equals(Object) |
現在の Tuple<T1,T2> オブジェクトが、指定されたオブジェクトと等しいかどうかを示す値を返します。 |
GetHashCode() |
現在の Tuple<T1,T2> オブジェクトのハッシュ コードを返します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
この Tuple<T1,T2> インスタンスの値を表す文字列を返します。 |
明示的なインターフェイスの実装
IComparable.CompareTo(Object) |
現在の Tuple<T1,T2> オブジェクトと指定したオブジェクトを比較して、現在のオブジェクトが、並べ替え順序において、指定したオブジェクトの前後または同じ位置のいずれにあるかを示す整数を返します。 |
IStructuralComparable.CompareTo(Object, IComparer) |
指定された比較子を使用して現在の Tuple<T1,T2> オブジェクトと指定されたオブジェクトを比較し、並べ替え順序において、現在のオブジェクトの位置が指定されたオブジェクトの前になるか、後ろになるか、同じになるかを示す整数を返します。 |
IStructuralEquatable.Equals(Object, IEqualityComparer) |
指定された比較メソッドに基づいて、現在の Tuple<T1,T2> オブジェクトが指定したオブジェクトと等しいかどうかを示す値を返します。 |
IStructuralEquatable.GetHashCode(IEqualityComparer) |
指定した計算メソッドを使用して、現在の Tuple<T1,T2> オブジェクトのハッシュ コードを計算します。 |
ITuple.Item[Int32] |
指定した |
ITuple.Length |
|
拡張メソッド
Deconstruct<T1,T2>(Tuple<T1,T2>, T1, T2) |
2 要素を持つタプルを別個の変数に分解します。 |
ToValueTuple<T1,T2>(Tuple<T1,T2>) |
|