C#でのキューの使い方とは?基本的な使い方・キューのコピー・LINQ拡張メソッド・キューのサイズ固定

エンジニア
マネージャー
C#でのキューの使い方とは?
今回は、C#でのキューの使い方について説明します。キューとは、cです。ここでは、基本的な使い方、キューのコピー、LINQ拡張メソッド、キューのサイズ固定方法について紹介します。
C#でのキューの使い方に興味のある方はぜひご覧ください。
基本的な使い方
C#でのキューの基本的な使い方を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
using System; using System.Collections.Generic; public class Program { public static void Main() { // キューの生成 var queue = new Queue(); // キューに値を登録 queue.Enqueue("red"); queue.Enqueue("green"); queue.Enqueue("blue"); queue.Enqueue("white"); queue.Enqueue("black"); // キューの個数 Console.WriteLine("Count:" + queue.Count); // Count:5 // キューの先頭を見る(取り出さない) Console.WriteLine("Peek:" + queue.Peek()); // Peek:red // キューの要素存在確認 Console.WriteLine("Contains(\"red\"):" + queue.Contains("red")); // Contains("red"):True // キューの先頭を取り出す Console.WriteLine("Dequeue:" + queue.Dequeue()); // Dequeue:red // キューの個数 Console.WriteLine("Count:" + queue.Count); // Count:4 // キューの先頭を見る(取り出さない) Console.WriteLine("Peek:" + queue.Peek()); // Peek:green // キューの要素存在確認 Console.WriteLine("Contains(\"red\"):" + queue.Contains("red")); // Contains("red"):False // キューの中身をすべて表示 foreach (string color in queue) { Console.WriteLine(color); } // キューをクリア queue.Clear(); // キューの個数 Console.WriteLine("Count:" + queue.Count); // Count:0 } } |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Count:5 Peek:red Contains("red"):True Dequeue:red Count:4 Peek:green Contains("red"):False green blue white black Count:0 |
このようにC#のキューには、Enqueue()で追加し、Dequeue()で取り出します。
キューのコピー
C#でのキューのコピー方法を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Collections.Generic; public class Program { public static void Main() { // キューの生成 var queue = new Queue(); // キューに値を登録 queue.Enqueue("red"); queue.Enqueue("green"); queue.Enqueue("blue"); queue.Enqueue("white"); queue.Enqueue("black"); // キューを新しいキューにコピー Queue copiedQueue = new Queue(queue.ToArray()); Console.WriteLine("copiedQueue :{0}", string.Join(",", copiedQueue)); // copiedQueue :red,green,blue,white,black // キューを新しい配列にコピー string[] queueArray2 = new string[queue.Count]; queue.CopyTo(queueArray2, 0); Console.WriteLine("queueArray2 :{0}", string.Join(",", queueArray2)); // queueArray2 :red,green,blue,white,black // 配列を新しいキューにコピー Queue copiedQueue2 = new Queue(queueArray2); Console.WriteLine("copiedQueue2:{0}", string.Join(",", copiedQueue2)); // copiedQueue2:red,green,blue,white,black } } |
実行結果は以下のようになります。
1 2 3 |
copiedQueue :red,green,blue,white,black queueArray2 :red,green,blue,white,black copiedQueue2:red,green,blue,white,black |
このようにC#では、キューのコピーができます。
LINQ拡張メソッド
LINQ拡張メソッドの使い方を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { // キューの生成 var queue = new Queue(); // キューに値を登録 queue.Enqueue("red"); queue.Enqueue("green"); queue.Enqueue("blue"); queue.Enqueue("white"); queue.Enqueue("black"); // 全要素 Console.WriteLine("全要素:{0}", string.Join(", ", queue)); // 全要素:red, green, blue, white, black // 先頭要素 Console.WriteLine("First:{0}", queue.First()); // First:red // 末尾要素 Console.WriteLine("Last:{0}", queue.Last()); // Last:black // Any Console.WriteLine("Any:{0}", queue.Any()); // Any:True Console.WriteLine("Any(red):{0}", queue.Any(value => value == "red")); // Any(red):True Console.WriteLine("Any(yellow):{0}", queue.Any(value => value == "yellow")); // Any(yellow):False // Where Console.WriteLine("eを含む要素:{0}", string.Join(", ", queue.Where(value => value.Contains("e")))); // eを含む要素:red, green, blue, white } } |
実行結果は以下のようになります。
1 2 3 4 5 6 7 |
全要素:red, green, blue, white, black First:red Last:black Any:True Any(red):True Any(yellow):False eを含む要素:red, green, blue, white |
このようにC#では、LINQ拡張メソッドでキューを扱えます。
キューのサイズ固定
C#でのキューのサイズ固定方法を紹介します。ここでは、FixedSizeQueueを自作します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
using System; using System.Collections.Generic; public class FixedSizeQueue { readonly Queue queue = new Queue(); public int size { get; private set; } public int Count => queue.Count; public T Dequeue() => queue.Dequeue(); public FixedSizeQueue(int size) { this.size = size; } public void Enqueue(T obj) { // キューに追加 queue.Enqueue(obj); // 指定サイズを超えたらDequeue while (queue.Count > size) { queue.Dequeue(); } } } public class Program { public static void Main() { // キューの生成 var queue = new FixedSizeQueue(3); // キューに値を登録 queue.Enqueue("red"); queue.Enqueue("green"); queue.Enqueue("blue"); queue.Enqueue("white"); queue.Enqueue("black"); // キューの個数 Console.WriteLine("queue.Count:{0}", queue.Count); // キューの表示 while (queue.Count > 0) { Console.WriteLine(queue.Dequeue()); } } } |
実行結果は以下のようになります。
1 2 3 4 |
queue.Count:3 blue white black |
このようにC#では、キューのサイズが固定できます。
エンジニア
マネージャー
まとめ
いかがでしたでしょうか。C#でのキューの使い方について説明しました。ここでは、基本的な使い方、キューのコピー、LINQ拡張メソッドについて紹介しました。
キューはEnqueueするたびにサイズが大きくなりますが、キューのサイズ固定方法についても紹介しました。
ぜひご自身でC#のソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅)システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅)デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅)基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)