0

以下のスニペットでラムダを使用して適切なTakeWhile構文を作成する方法を理解しようとしていたので、このフィルタリングを機能させて、フィルタリングされた辞書を返すことができます。ここの誰かが助けることができますか?前もって感謝します..

List<KeyValuePair<int, int>> myList = myHashList.ToList();
myList.Sort( (x,y) => x.Value.CompareTo(y.Value) );
var temp = myList.TakeWhile(x => x.Value >= keyToFind);
Dictionary<int, int> outDict = temp.ToDictionary(y => y.Key, y => y.Value);

ここで、myHashListはn個の整数値と整数キーを持つ辞書(int、int)であることにも言及しておきます。ここで、myList.TakeWhile(x => x.Value> = KeyToFind)を使用しているラムダが1回だけ実行されています。つまり、実行時のxは最初のレコードのみを保持し、比較は1回行われ、tempには0レコードがありますが、2行目以降のmyListにはnレコードがあります。ただし、実行時に、ラムダ比較が行われるとき、myListはコンテキストに含まれていません。ただし、実行が4行目に戻ると、myListはコンテキストに戻りますが、tempには常に0レコードがあります。TakeWhileが機能していません。ラムダを修正する必要がありますか?

4

1 に答える 1

0

わかりました、ここに自分で答えを追加します。実はばかげたことでした。ラムダは逆ではなく(x => keyToFind> = x.Value)である必要があります。これは、リストが常に値0から昇順で並べ替えられているため、> = keyToFind(代わりにValueToFindである必要があります)になることはないためです。 KeyではなくValueを見つけることを意図していたので、keyToFindの)、ありがとうございます!

于 2013-01-31T08:35:45.820 に答える