C#检查字典值并删除之后的条目

时间:2017-03-15 23:13:27

标签: c# dictionary

所以我有一个字典(字符串,int> ,我需要删除字典中具有重复值的所有条目,第一个条目除外 所以,如果你有;

dictionary<bob, 1>
dictionary<sam, 2>
dictionary<jack, 1>
dictionary<billy, 1>

然后需要移除jack和billy,同时保留bob和sam。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

严格来说,没有第一个第二个值,但如果你只想保留一个值,那么无论结果都会是的,你可以使用反向字典来做到这一点:

Dictionary<int,string> reverse = new Dictionary<int,string>();
foreach(string key in dictionary.Keys){
    if (reverse.ContainsKey( dictionary[key] ))
        continue;
    reverse.Add( dictionary[key], key );
}

现在,您的reverse字典的值为其键(因此它是唯一的)以及附加到其中的一个名称(&#34的名称;第一个&#34;该值的出现)。但是,如果您第二次执行相同的操作,结果可能会有所不同,因为字典中根本没有订单。

答案 1 :(得分:1)

在字典key-value pairs come in no specific order中。如果您可以保留任意一个,可以使用LINQ:

config(['database.connections.'.$company->id => [
    'driver'   => 'mysql',
    'host'     => $company->host,
    'username' => $company->username,
    'password' => $company->password
]]);

//Using it
$clients = DB::connection($company->id)->select(...);

答案 2 :(得分:0)

无法从字典中判断出哪个值首先被插入,因为键值对不以任何特定顺序存储。如果要确保字典中的值是唯一的,则必须在添加值时跟踪这些值。最简单的方法是使用HashSet。例如:

Dictionary<int, string> dictionary = new Dictionary<int, string>();
HashSet<string> values = new HashSet<string>();

...

public void AddToDictionary(int key, string value)
{
    if (values.Contains(value))
        return;

    dictionary.Add(key, value);
    values.Add(value);
}