如何从字符串Dictionary中删除最后2个keyValuePairs,其中键以“MyKey_”开头?
var myDict = new Dictionary<string, string>();
myDict.Add("SomeKey1", "SomeValue");
myDict.Add("SomeKey2", "SomeValue");
myDict.Add("MyKey_" + Guid.NewGuid(), "SomeValue");
myDict.Add("MyKey_" + Guid.NewGuid(), "SomeValue");
myDict.Add("MyKey_" + Guid.NewGuid(), "SomeValue");
编辑:
var noGwInternal = myDict.Where(o => !o.Key.StartsWith("MyKey_")).ToDictionary(o => o.Key, o => o.Value);
var gwInternal = myDict.Where(o => o.Key.StartsWith("MyKey_")).ToDictionary(o => o.Key, o => o.Value);
如何从这里前进?需要从gwInternal中删除2个项目,然后将noGwInternal + gwInternal放入一个新的词典中
答案 0 :(得分:1)
这应该做你正在尝试做的事情(根据你在评论中发布的内容)。
(编辑:看起来你替换了你的评论,现在我不确定你是按照字母顺序排列......)
var myDict = new Dictionary<string, string>();
myDict.Add("SomeKey1", "SomeValue");
myDict.Add("SomeKey2", "SomeValue");
myDict.Add("MyKey_B" + Guid.NewGuid(), "SomeValue");
myDict.Add("MyKey_A" + Guid.NewGuid(), "SomeValue");
myDict.Add("MyKey_C" + Guid.NewGuid(), "SomeValue");
var pairsToRemove = myDict.Where(x => x.Key.StartsWith("MyKey_"))
.OrderByDescending(x => x.Key)
.Take(2);
foreach (var pair in pairsToRemove)
{
myDict.Remove(pair.Key);
}
foreach (var pair in myDict)
{
Console.WriteLine(pair);
}
输出:(MyKey_B和MyKey_C已删除)
[SomeKey1, SomeValue]
[SomeKey2, SomeValue]
[MyKey_Ad6c3a25d-5d8c-44e4-9651-39164c0496fc, SomeValue]
我喜欢tevemadar提到的有关OrderedDictionary
的内容......我不确定它是否适合您尝试做的事情,但它值得一试看。
答案 1 :(得分:1)
不确定你的意思&#39; last&#39;,因为这是一个字典(没有顺序),但是这个代码将按照它们在循环中遇到的顺序删除最后2个。
List<string> toRemove = new List<string>();
foreach(KeyValuePair pair in myDict.Reverse())
{
if(pair.key.StartsWith("MyKey_"))
{
toRemove.Add(pair.key);
toRemoveCount--;
}
if(toRemove.Count == 2)
{
break;
}
}
foreach(string str in toRemove)
{
myDict.Remove(str);
}