Index型と^演算子
コレクションの末尾から要素を参照します。
「Index型と^演算子」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
Index 型を知る
C# には、シーケンス内の位置を表す専用の System.Index 型があります。通常の int とは異なり、Index は先頭からの位置だけでなく、コレクションの末尾から数えた位置も表せます。
これにより、「最後の要素を取得する」といったコードを、意図が明確で安全な形で記述できます。
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10^(末尾から)演算子
ハット演算子 ^ は、末尾から数える Index を作成します。^1 は最後の要素、^2 は最後から 2 番目の要素を表し、以降も同様です。
^1 は有効な最後のインデックスですが、^0 は Length と等しく、末尾の 1 つ先を表すことに注意してください。
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40第一級の値としての Index
Index は、変数に格納したり、メソッドに渡したり、再利用したりできる実際の値です。これにより、位置とコレクションを分離できます。
using System;
int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]); // 5
Console.WriteLine(data[secondLast]); // 4IsFromEnd と Value
すべての Index は、2 つのプロパティを公開します。Value は整数のオフセット、IsFromEnd は ^ を使って作成されたかどうかを表します。
using System;
Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd); // 2 TrueGetOffset で位置を解決する
末尾から数えるインデックスは、コレクションの長さが分かって初めて意味を持ちます。Index.GetOffset(length) を使用すると、具体的な 0 始まりのオフセットに変換できます。
using System;
Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4^0 は末尾の 1 つ先
^0 は Length に解決されるため、これを使ってインデックスを指定すると例外がスローされます。排他的な範囲の上限としてのみ役立ちます。範囲については次のレッスンで説明します。
using System;
int[] data = { 1, 2, 3 };
try {
Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
Console.WriteLine("^0 is past the end");
}さまざまなコレクションで使える Index
インデクサーと Length または Count プロパティ(および適切なサポート)を備えた型であれば、Index を使用できます。配列、string、Span<T> はすべて、そのまま使用できます。
using System;
string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // Cインデックスを動的に計算する
変数に対して ^ 演算子を使用すると、実行時の整数値から Index を作成できます。
using System;
int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n; // ^ works on variables too
Console.WriteLine(data[idx]); // 15Index と通常の int の違い
通常の int は常に先頭から数えます。Index を使うと末尾から数える機能が追加されますが、int から暗黙的に変換できるため、既存のコードはそのまま動作します。
using System;
Index a = 1; // implicit from int
Index b = ^1; // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // Trueオフバイワンエラーを避ける
以前は最後の要素を取得するために arr[arr.Length - 1] と記述していました。^1 を使えば意図が明確になり、計算を間違える心配もありません。
using System;
int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]); // new way: 95実際のコードで使う Index
ここでは、^1 を使って任意の配列の最後の項目を返す小さなヘルパーを示します。呼び出し側をすっきりと記述できます。
using System;
static T Last<T>(T[] items) => items[^1];
int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12簡単な確認
Index 型と ^ 演算子についての理解を確認してください。
まとめ
System.Index は、先頭から数える位置、または ^ 演算子を使って末尾から数える位置を表すことを学びました。
^1は最後の要素、^0はLengthと等しく、末尾の 1 つ先を表します。IndexにはValue、IsFromEnd、GetOffset(length)があります。intから暗黙的に変換でき、配列、文字列、スパンで使用できます。
よくある質問
「Index型と^演算子」レッスンは無料ですか?
はい。「Index型と^演算子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「Index型と^演算子」で何を学びますか?
コレクションの末尾から要素を参照します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Index型と^演算子」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Index型と^演算子
- Range型と..演算子
- 配列と文字列の範囲
- 範囲をサポートするカスタム型