ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

[C#] foreach文で連結リストを探索! ~ foreach文を再考…してる? ~

前回と同じような記事タイトルになってしまって、“連結リスト探索シリーズ”が生まれそうですね(笑)

前回はC言語系のfor文で連結リストを走査できる、という話題でしたが、
(記事「for文で連結リストを探索! ~ for文を再考する」を参照)

今回はC#の話に限ります。
しかし、多分Javaにも通用すると思います。


.NET Frameworkには連結リストのLinkedList<T>が標準で用意されています。

前回は連結リストをfor文で走査しましたが、なんとC#ならforeachで操作できるのです。


LinkedList<T>はIEnumerable<T>を実装しているからです。

T型の要素の列挙としても扱えるわけですね。

例えばこんな感じです。


var list = new LinkedList<string>();

list.AddLast("バナナ"):
list.AddLast("黄色");
list.AddLast("キレンジャー");
list.AddLast("カレー");

foreach(string str in list) {
Console.WriteLine(str);
Console.Write(str + " といえば ");
}


出力

バナナ
バナナ といえば 黄色
黄色 といえば キレンジャー
キレンジャー といえば カレー
カレー といえば


for文で走査したときよりさらにシンプルに書けていいですね。


ただ、実行速度等の処理パフォーマンスはfor文で走査するときよりも劣りますので(そのはず)、注意してください。

その主な原因はforeachが外部イテレータを使っているからです(そのはず)

まぁ、配列に変換しているわけではないので、list.ToArray()をforeachにかけるよりは高パフォーマンスですね。


処理パフォーマンスと書きやすさのどちらをとるかはよく考えてください。

tag:

コメント

連結リストはfor文で間に合うかも、
foreach文はハッシュテーブルとかに使いそう。

僕はC#についての知識は皆無なのです;;

  • 2014/02/21(金) 22:53:12 |
  • URL |
  • funcHM #-
  • [ 編集 ]

Re: funcHM

そうですね。
C#にはハッシュテーブルというかハッシュテーブルの辞書がありますが、
それもIEnumerable<T>を実装していたはずです。

キーや値には、配列に変換してアクセスするよりも、イテレータでアクセスするほうが少し高パフォーマンスになりますね。

funcHMさんはJavaを習得されていますので、C#も楽勝だと思います。
ぜひC#を覚えてマイクロソフト信者になってみてはどうでしょう(笑)

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/326-79e5703e
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。