0

いくつかのデータをページングしていますlong。データセット内の各要素の ID を含む のリストがあります。今のところ、私は次のようなものを持っています:

List<long> TheListOfIDs = {23,435,6635,4224,546,756,23,542....};

TheListOfIDs実際には何千もの ID が含まれています。データの各ページには 20 個の要素が含まれています。を受け取りlong、ID があるページ番号を返す関数を作成しています。たとえば、サンプル データでは、ID 番号435は 2 番目の位置にあるため、最初の 20 要素の一部であり、したがって 1 ページにあります。

私が書いたら

int ThePageNumber = TheListOfIDs.IndexOf(TheID) / 20;

これはすべての場合に機能しますか?

更新編集: リスト内の各要素は一意であり、関数で渡された ID は確実にリスト内にあります!

4

4 に答える 4

0

id のリストに id が存在しない場合を確認する必要があります。Java コードは次のとおりです。

public int getPage(List<Long> ids, Long id)
{
    int index = ids.indexOf(id);
    if (index == -1) 
        return -1; // the id does not exist in the list
    return (index / 20) + 1; // the page number should start from index 1
}
于 2012-05-15T14:06:52.887 に答える
0

さまざまなケースの単体テストを作成することをお勧めします。私が念頭に置いているものは次のとおりです。

  • 最初のページの最初
  • 最後のページの最後
  • 最初のページの真ん中
  • 中ページの最初
  • 中ページの最後
  • 中ページのど真ん中

あなたのコードがこれらのテストに合格すれば、問題ないと思います。

于 2012-05-15T14:00:21.860 に答える
0

MoreLinqを使用します。バッチ:

var pagebatches = TheListOfIDs.Batch(20);

pagebatch の要素には、最大 20 個のアイテムが含まれます。各項目はページ番号に対応しています。

pagebatches の最後の要素には、残りのアイテム (<=20) が含まれる場合があります。

于 2012-05-15T14:08:22.973 に答える
0

掲載順位 2 はページ 1 にあると言いますが、2/20 = 0 なので、うまくいきません。

しかし、あなたはできる

int ThePageNumber = (TheListOfIDs.IndexOf(TheID) + NumIDsInEachPage - 1) / NumIDsInEachPage ;
于 2012-05-15T14:21:51.933 に答える