2011-08-14 6 views
2

私はList<Player>を文字列に出力したいので、これを行う正しい方法と、単純なforeachが常にそれを注文しているのであれば疑問に思っています(これまでのテストから)?例えばリストをフォアしたり、どちらが正しいアプローチですか?

:後でXは、リスト内のプレイヤーの数であるlist[X]のようにそれを得る私は可能でし

int position = 0; 
foreach (var player in list) 
{ 
    position++; 
    Console.Write(position.ToString() + " " + player.Name); 
} 

これを行うより良い方法はありますか?

+0

あなたのアプローチはうまくいくはずです。 – lowerkey

答えて

3

リストは、リストに追加された順序で要素を出力します。リストは、リストに追加された順序で要素を出力します。 .net 3.0以降を使用している場合は、.OrderBy(r=> r.Foo)を実行して出力を印刷する前に注文を保証することができます。あなたがあなたのループ中にカウンタをインクリメントするつもりならばforeachの

for(int pos =0; pos<list.count; ++pos) { 
    Console.Write(pos.ToString() + " " + list[pos].Name); 
} 
+0

リストインデクサーは一定の時間であることが保証されていますか? –

+0

リストは私が出力する必要がある時には変更されません。それは一定していると思います。私は完全に忘れてしまいました。 – Prix

+0

@Prixリストは一定であってもかまいませんが、インデクサが一定時間であることを意味するものではありません。たとえば、リストが各要素をステップ実行することによって実装されている場合、 'list [1000]'にアクセスするには1000ステップ(一定時間ではありません)が必要です。標準配列の場合、 'list [1000]'は既知の場所にあるので、操作は一定の時間です。リスト内の後の要素にアクセスするために多くの操作が必要な場合、forループはforeachよりもはるかに遅いです。 –

1

リストの場合、foreachを使用すると常にリストの元の順序で出力されます。

+0

ありがとう;)もうちょっと疑問だった;) – Prix

1

あなたは何をしていますか? Listは順序付けされたコレクションであり、その列挙子も順序付けられています。

+0

漬物、それは本当ですが、辞書は主にそのキーに依存しています。リストに何らかの並べ替えがあったかどうかは確かではありませんでした:)私はgetenumerator関数を見ていましたが、まだ疑問の余地があった。 – Prix

0

とは対照的に、注文したことで、あなたのforeachのであることを、コレクション内のそれに順に意味ならば、私はループのための古典を使用することをお勧めし私はそれをどうやってやるのだろう。しかし、注文を変更する必要がある場合は、特にplyerクラスのさまざまなプロパティで注文したい場合は、LINQの使用について考えるかもしれません。

関連する問題