1

プロパティの市民番号の最初の 2 桁に関してメンバーのリストを並べ替えたいと考えています。検索年が 82 の場合、市民番号が 82 で始まるすべての人が返されるリストに残ります。

これは私が書いたメソッドで、名前の最初の文字に関してソートされたリストを返します。

private static List<Member> GetNameList(string searchString) 
{
    return _sortMemberList.Where(x => x.FirstName.ToLower().StartsWith(searchString.ToLower())).ToList();
}

simular メソッドを書きたいのですが、Civic Number に関してです。市民番号は 10 桁の長さで、データ型は "long" です。これが機能しないことはわかっていますが、まあ、ここに何かがあります:

private static List<Member> GetMonthList(int searchYear)
{
    return _sortMemberList.OrderBy(x => x.CivicNumber > searchYear).ToList();
}

ロバート・ジャールビック

4

1 に答える 1

1

最も単純で非常に非効率的なアプローチは、単純に

_sortMemberList.Where(x => x.CivicNumber.ToString().StartsWith(searchYear.ToString())).ToList()

そうでなければ、あなたはできる

_sortMemberList.Where(x => (x.CivicNumber/100000000) == searchYear ).ToList()

searchYearすべての数字が実際に 10 桁であり、常に 2 桁であることがわかっていると仮定します。

リストがすでにソートされている場合は、より効率的にすることができます:

_sortMemberList
     .SkipWhile(x => x.CivicNumber < searchYear*100000000 )
     .TakeWhile(x => (x.CivicNumber/100000000) == searchYear )
     .ToList()

二分探索を使用してターゲット年の下限を見つけるのがさらに効率的ですが、これ_sortMemberListはランダム アクセス (インデックス作成) が許可されている場合にのみ実行できます。

于 2013-10-17T11:23:12.397 に答える