gpt4 book ai didi

C#获取重复值的字典第一个键

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:45 25 4
gpt4 key购买 nike

我有以下字典:

Dictionary<int, int> myDict = new Dictionary<int, int>();
myDict.Add(0, 6);
myDict.Add(1, 10);
myDict.Add(2, 6);
myDict.Add(3, 14);
myDict.Add(4, 10);
myDict.Add(5, 10);

我已经知道如何获取所有重复值:

var duplicatedValues = myDict.GroupBy(x => x.Value).Where(x => x.Count() > 1);

但我想要的是以下内容:包含重复值的所有键的列表,但不包括最后一个重复的值。所以在我上面的列表中,重复值是 10 和 6,我想要的是以下键的列表:0、1、4(因此不包括 2 和 5)

执行此操作的最佳方法是什么?

如有任何帮助,我们将不胜感激。提前致谢。

编辑:我确实设法通过修改我在互联网上找到的东西来使用这段代码,但老实说,我发现首先从键创建一个字符串然后再返回到整数有点愚蠢。我对 Aggregate-command 有点陌生,所以欢迎任何有关如何修改以下代码的帮助:

var lookup = allIDs.ToLookup(x => x.Value, x => x.Key).Where(x => x.Count() > 1);

foreach (var item in lookup) {
var keys = item.Aggregate("", (s, v) => s + "," + v);
string[] split = keys.Split(',');
for (int i = 0; i < split.Length - 1; i++) {
if (!split[i].Equals("")) {
Console.WriteLine("removing card nr: " + split[i]);
CurrentField.removeCardFromField(Convert.ToInt32(split[i]));
}
}
}

最佳答案

应该这样做:

var firstKeysOfDupeValues = myDict
.GroupBy(x => x.Value)
.SelectMany(x => x.Reverse().Skip(1))
.Select(p => p.Key);
.ToList();

按值分组后,使用 .Reverse().Skip(1) 拒绝每个值组的最后一个键(这个结构有双重作用:它也拒绝非重复值)和剩余键/值对的键被提取到结果中。

关于C#获取重复值的字典第一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22323706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com