Spread要素
Spread演算子でコレクションを結合します。
「Spread要素」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
スプレッド要素 ..
コレクション式の中で、スプレッド要素 .. を使うと、別のコレクションの内容をインライン展開できます。これにより、シーケンスを宣言的に結合できます。
using System;
int[] a = [1, 2, 3];
int[] b = [4, 5, 6];
int[] all = [..a, ..b];
Console.WriteLine(string.Join(",", all)); // 1,2,3,4,5,6スプレッドと単一要素の組み合わせ
スプレッド要素と個々の値は自由に交互に配置でき、その順序も維持されます。
using System;
int[] middle = [2, 3, 4];
int[] result = [1, ..middle, 5];
Console.WriteLine(string.Join(",", result)); // 1,2,3,4,5先頭と末尾への追加
スプレッドを使えば、「先頭に追加」や「末尾に追加」を簡単に実現できます。元のコレクションを変更するのではなく、新しいコレクションを生成します。
using System;
int[] core = [10, 20, 30];
int[] withHead = [0, ..core];
int[] withTail = [..core, 40];
Console.WriteLine(string.Join(",", withHead)); // 0,10,20,30
Console.WriteLine(string.Join(",", withTail)); // 10,20,30,40複数のソースの展開
任意の数のコレクションを1つに展開できます。これにより、複数のリストを1つの式で連結できます。
using System;
using System.Collections.Generic;
List<string> x = ["a", "b"];
List<string> y = ["c"];
List<string> z = ["d", "e"];
List<string> merged = [..x, ..y, ..z];
Console.WriteLine(string.Join(",", merged)); // a,b,c,d,e異なるコレクション型の展開
スプレッドのソースには、任意の列挙可能オブジェクトを指定できます。配列をリストに展開したり、リストを配列に展開したりできます。結果の型はターゲット型によって決まります。
using System;
using System.Collections.Generic;
int[] arr = [1, 2];
List<int> list = [3, 4];
int[] combined = [..arr, ..list];
Console.WriteLine(string.Join(",", combined)); // 1,2,3,4IEnumerable の展開
LINQ による遅延シーケンスも展開できます。この場合、新しいコレクションの構築時に列挙されます。
using System;
using System.Linq;
var evens = Enumerable.Range(1, 6).Where(n => n % 2 == 0);
int[] result = [0, ..evens];
Console.WriteLine(string.Join(",", result)); // 0,2,4,6コレクションの組み立て
スプレッドを使うと、命令型の Add 呼び出しを使わずに、コレクションを段階的に組み立てられます。
using System;
int[] baseline = [1, 2, 3];
int[] extra = [4, 5];
int[] full = [..baseline, ..extra, 6];
Console.WriteLine(full.Length); // 6順序が重要
結果のシーケンスは、要素とスプレッドを記述した順序に従います。そのため、スプレッドの順序を入れ替えると出力も変わります。
using System;
int[] a = [1, 2];
int[] b = [3, 4];
Console.WriteLine(string.Join(",", [..a, ..b])); // 1,2,3,4
Console.WriteLine(string.Join(",", [..b, ..a])); // 3,4,1,2スプレッドと Concat の比較
スプレッドは、多くの場合 Concat + ToArray の代わりになります。コードがより明確になり、コンパイラが結果のサイズを効率的に決定できます。
using System;
using System.Linq;
int[] a = [1, 2];
int[] b = [3, 4];
// old
int[] oldWay = a.Concat(b).ToArray();
// new
int[] newWay = [..a, ..b];
Console.WriteLine(oldWay.SequenceEqual(newWay)); // TrueSpan への展開
ターゲットにはスパンも指定できるため、パフォーマンスが重要な処理で、スタック割り当ての可能性を活かしながらデータを組み合わせられます。
using System;
ReadOnlySpan<int> head = [1, 2];
ReadOnlySpan<int> tail = [3, 4];
int[] joined = [..head, ..tail];
Console.WriteLine(string.Join(",", joined)); // 1,2,3,4実践的なマージ
ここでは、既定の設定と上書き設定を1つの式でマージし、既定値の後に後続の値を配置します。
using System;
string[] defaults = ["--verbose", "--color"];
string[] userArgs = ["--output=log.txt"];
string[] finalArgs = [..defaults, ..userArgs];
Console.WriteLine(string.Join(" ", finalArgs));理解度チェック
スプレッド要素を理解できているか確認しましょう。
まとめ
コレクション式内で使用するスプレッド要素 .. について学びました。
[..a, ..b]でコレクションを連結できます。- スプレッドは単一要素と組み合わせられ、順序も維持されます。
- ソースには、配列、リスト、スパン、または任意の
IEnumerableを指定できます。 Concat().ToArray()よりも明確な代替手段です。
よくある質問
「Spread要素」レッスンは無料ですか?
はい。「Spread要素」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「Spread要素」で何を学びますか?
Spread演算子でコレクションを結合します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Spread要素」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。