从NameValueCollection中删除单个值
本文关键字:单个值 删除 NameValueCollection | 更新日期: 2023-09-27 18:14:10
我的数据源可能有重复的键值。
typeA : 1
typeB : 2
typeA : 11
我选择使用NameValueCollection
,因为它允许输入重复的密钥。
我想从集合中删除特定的键'值对,但NameValueCollection.Remove(key)
删除与指定键相关的所有值。
- 是否有办法从
NameValueCollection
中删除单个密钥'值对,或 - c#中是否有适合我的数据的更好的集合
[编辑1]
首先,谢谢你的回答:)
我想我应该提到我的数据源是XML。
我使用System.Xml.Linq.XDocument
来查询类型,并且可以方便地删除特定的值。
现在,我的问题是,对于大数据,考虑到性能,使用XDocument是一个好的选择吗?如果不是,还有什么其他替代方案(可能回到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已经存在。因此,您可以输入一个新键来插入该数据。