C# 从NameValueCollection中删除单个值
我的数据源可能具有具有值的重复键C# 从NameValueCollection中删除单个值,c#,namevaluecollection,C#,Namevaluecollection,我的数据源可能具有具有值的重复键 typeA : 1 typeB : 2 typeA : 11 我选择使用NameValueCollection,因为它允许输入重复的键 我想从集合中删除特定的键\值对,但NameValueCollection.remove(key)删除与指定键关联的所有值 有没有办法从NameValueCollection中删除单个键值对, 或 是否有更适合我的数据的C#集合 [编辑1] 首先,感谢所有的答案:) 我想我应该提到我的数据源是XML 我使用System.Xm
typeA : 1
typeB : 2
typeA : 11
我选择使用NameValueCollection
,因为它允许输入重复的键
我想从集合中删除特定的键\值对,但NameValueCollection.remove(key)
删除与指定键关联的所有值
NameValueCollection
中删除单个键值对,
或System.Xml.Linq.XDocument
来查询类型,还可以方便地删除特定值
现在,我的问题是,对于大型数据,考虑到性能,使用XDocument是否是一个好的选择?
如果没有,还有什么其他选择(可能返回到NameValueCollection并使用其中一种技术删除数据)您可以使用Dictionary集合:
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("typeA", 1);
dictionary.Add("typeB", 1);
Dictionary Dictionary=newdictionary();
词典.加上(“A型”,1);
字典。加上(“B型”,1);
当您尝试插入type:11
时,它将抛出异常,因为密钥已经存在。因此,您可以输入一个新密钥来插入此数据
有关更多帮助,请参阅此文档。您可以将其转换为哈希表
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]);
做你自己的方法,对我有用--
用同一个键存储多个值的想法有点奇怪。但我认为可以使用GetValues检索所有值,然后删除不需要的值,然后使用Set和后续的Add方法将它们放回原处。您可以为此创建一个单独的扩展方法。也许不是最好的方法,但是
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());
公共类单一类型
{
公共字符串名称;
公共价值观;
}
列表类型列表=新列表();
添加(新的SingleType{Name=“TypeA”,Value=1});
添加(新的SingleType{Name=“TypeA”,Value=3});
typeList.Remove(typeList.Where(t=>t.Name==“TypeA”&&t.Value==1.Single());
NameValueCollection
实际上不允许有多个具有相同密钥的条目。它只是将现有键的新值连接到以逗号分隔的值列表中(请参阅)
因此,每个键实际上只有一个值。可以想象,您可以在“,”上拆分它们,并删除有问题的值
编辑:@ElDog是正确的,有一个GetValues方法可以为您执行此操作,因此无需拆分。
我认为更好的选择是使用
Dictionary
或Dictionary
将值存储为离散的erm,value不,我认为它不适用于元素的索引,可能您需要尝试其他方法tryList
确实没有办法。如果必须这样做,只需在整件事,打造一个全新的NameValueCollection。NameValueCollection功能强大得惊人,但与所有特定的集合一样,它是为完成特定的任务而构建的,有些事情根本无法用它来完成。字典将包含值[“a”、“1,1”和[“b”、“2”]。这可能不是Ayman所追求的。Single()
如果列表中没有一个元素,则引发异常。这应该可以:var val=typeList.Where(t=>t.Name==“TypeA”&&t.Value==1.SingleOrDefault();if(val!=null)typeList.Remove(val);
是的,对不起,应该提到这一点-只是很快地将代码拼凑在一起……但是抛出一个(捕获)异常在这里可能很方便,表明有人试图删除IMO中的无效数据。是的,这取决于用户是否考虑“尝试删除无效数据”异常此解决方案仅在EqualityComparer.Default
和EqualityComparer.Default
产生正确结果时有效。
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());