从NameValueCollection中删除单个值

本文关键字:单个值 删除 NameValueCollection | 更新日期: 2023-09-27 18:14:10

我的数据源可能有重复的键值。

typeA : 1
typeB : 2
typeA : 11

我选择使用NameValueCollection,因为它允许输入重复的密钥。

我想从集合中删除特定的键'值对,但NameValueCollection.Remove(key)删除与指定键相关的所有值。

  1. 是否有办法从NameValueCollection中删除单个密钥'值对,或
  2. c#中是否有适合我的数据的更好的集合

[编辑1]

首先,谢谢你的回答:)

我想我应该提到我的数据源是XML。

我使用System.Xml.Linq.XDocument来查询类型,并且可以方便地删除特定的值。

现在,我的问题是,对于大数据,考虑到性能,使用XDocument是一个好的选择吗?如果不是,还有什么其他替代方案(可能回到NameValueCollection并使用前面提到的一种技术来删除数据)

从NameValueCollection中删除单个值

用同一个键存储多个值的想法有点奇怪。但是我认为你可以使用GetValues检索所有值然后移除你不需要的那个然后用Set和随后的Add方法放回它们。

NameValueCollection实际上不允许具有相同键的多个条目。它只是将现有键的新值连接到一个逗号分隔的值列表中(参见NameValueCollection.Add.

)。

所以每个键实际上只有一个值。您可以想象得到的值拆分他们',',并删除违规的值。

Edit: @ElDog is correct, there is a GetValues method which does this for you so no need to split.

我认为更好的选择是使用Dictionary<string, IList<int>>Dictionary<string, ISet<int>>将值存储为离散的erm,值

可以转换为哈希表

           var x = new NameValueCollection();
           x.Add("a", "1");
           x.Add("b", "2");
           x.Add("a", "1");
           var y = x.AllKeys.ToDictionary(k => k, k=>x[k]);

创建自己的方法,它适用于我——

public static void Remove<TKey,TValue>(
  this List<KeyValuePair<TKey,TValue>> list,
  TKey key,
  TValue value) {
  return list.Remove(new KeyValuePair<TKey,TValue>(key,value)); 
}

然后在列表中调用——

list.Remove(key,value); //Pass the key value...

也许不是最好的方法,但是....

public class SingleType
{
    public string Name;
    public int Value;
}
List<SingleType> typeList = new List<SingleType>();
typeList.Add (new SingleType { Name = "TypeA", Value = 1 });
typeList.Add (new SingleType { Name = "TypeA", Value = 3 });
typeList.Remove (typeList.Where (t => t.Name == "TypeA" && t.Value == 1).Single());

您可以使用Dictionary集合:

Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("typeA", 1);
dictionary.Add("typeB", 1);

当你尝试插入type: 11时,它会抛出异常,因为Key已经存在。因此,您可以输入一个新键来插入该数据。