37

頻繁に更新されるスコアの動的リストに取り組んでいます。最終的に、これは全体的な評価を生成するために使用されるため、古いエントリ (時間ではなく、いくつかのパラメーターに基づく) を削除して、全体的な +/- の重み付けを防ぐ必要があります。別の列挙から一度に複数の値を追加します。

  List<int> scoreList = new List<int>();

  foreach(Item x in Items)
  { 
     scoreList.Add(x.score);
  }

  //what I need help with:
  if(scoreList.Count() > (Items.Count() * 3))
  {
      //I need to remove the last set (first in, first out) of values size 
      //Items.Count() from the list
  }

誰かがそれを助けることができれば、それは大歓迎です:)コードはかなり暗号的に書かれているため、コードを少し一般的にする必要がありました(メソッドを書きませんでした)。

4

6 に答える 6

50

使用List<T>.RemoveRange- 次のようなもの:

// number to remove is the difference between the current length
// and the maximum length you want to allow.
var count = scoreList.Count - (Items.Count() * 3);
if (count > 0) {
    // remove that number of items from the start of the list
    scoreList.RemoveRange(0, count);
}

Addアイテムが最後に移動するため、リストの最初から削除します-したがって、最も古いものが最初に表示されます。

于 2013-06-05T04:48:37.803 に答える
25

これを試して

scoreList.RemoveAt(scoreList.Count-1);

そして、これがMSDNの記事です

于 2013-06-05T04:48:24.253 に答える
1

私はあなたの質問をよく理解していませんでした。

scoreList.RemoveRange(Items.Count()*3, scoreList.Count()-Items.Count()*3);
于 2013-06-05T04:49:48.993 に答える
0

上記の方法( )をいじってみましたscoresList.RemoveAt()が、状況に合いませんでした。最終的に何が機能したか:

 if (...)
 {
    scoresList.RemoveRange(0, scores.Count);
 }

助けてくれてありがとう

于 2013-06-05T04:52:32.787 に答える
0

linq を使用してリストから最後の n 要素を取得する簡単な方法

      scoreList.Skip(Math.Max(0, scoreList.Count() - N)).Take(N)
于 2013-06-05T04:50:33.770 に答える