0Pricing
C# Academy · レッスン

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]); // 4

IsFromEnd と 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 True

GetOffset で位置を解決する

末尾から数えるインデックスは、コレクションの長さが分かって初めて意味を持ちます。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]); // 15

Index と通常の 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Index型と^演算子
  2. Range型と..演算子
  3. 配列と文字列の範囲
  4. 範囲をサポートするカスタム型
← C# Academyに戻る