3

私がこのConcurrentDictionaryを持っている場合:

public class User
{
    public string Context { get; set; }
    public bool Owner { get; set; }
}

protected static ConcurrentDictionary<User, string> OnlineUsers = new ConcurrentDictionary<User, string>();

Owner私がすでにの値を持っている場合、誰かが私がの値を取得する方法を知っていContextますか?基本的には、を使用して「検索」を実行したいと思いますContext。ありがとう。

4

4 に答える 4

1

FirstOrDefault()次のような標準のLinqメソッドの使用を妨げるものはありますか?

var item = OnlineUsers.FirstOrDefault(kvp => kvp.Key.Context == myContext);
于 2012-09-21T19:30:10.597 に答える
1

どのように何かのような

var ou = OnlineUsers.First(x => x.Key.Context == "TADA");
于 2012-09-21T19:35:04.330 に答える
0

Dictionary<string, User>コンテキストが与えられたときに、それが対応するものstringを教えてくれる必要があるようです。Userこのルックアップを数回実行する必要があり、追加のメモリを使用しても問題がない場合は、そのような辞書を作成する価値があるかもしれません。

検索を1回または2回だけ実行する場合、またはマッピングが頻繁に変更されて辞書を最新の状態に保つことができない場合は、foreachループを使用して辞書に対して線形検索を実行できます。他の回答で示されているように、FirstまたはなどのLINQメソッドを使用します。Where

于 2012-09-21T19:36:08.457 に答える
0

どうぞ:

ConcurrentDictionary<User, string> dict = new ConcurrentDictionary<User, string>();

dict.TryAdd(new User() { Context = "a", Ownder = false }, "aa");
dict.TryAdd(new User() { Context = "b", Ownder = false }, "bb");
dict.TryAdd(new User() { Context = "c", Ownder = true }, "cc");
dict.TryAdd(new User() { Context = "d", Ownder = false }, "dd");

IEnumerable<User> list = dict.Keys.Where(p => p.Context == "a");
于 2012-09-21T19:41:13.503 に答える