gpt4 book ai didi

c# - 查询值

转载 作者:行者123 更新时间:2023-11-30 17:43:36 25 4
gpt4 key购买 nike

two_Dict 字典中的声明和条目按给定的方式创建:

Dictionary<string, List<string>>two_Dict = new Dictionary<string, List<string>>();
List<string> list;

if (!two_Dict.TryGetValue(d.ToString(), out list))
{
two_Dict.Add( d.ToString(), list = new List<string>());
list.Add(possibility_cell_list[0]);
list.Add(possibility_cell_list[1]);
}

two_Dict 中的示例条目:

two_Dict["5"] Count = 2 [0]: "A2"  [1]: "D2"
two_Dict["6"] Count = 2 [0]: "A2" [1]: "D2"

我希望形成一个 linq 查询,以获取字典 two_Dict 中具有相同列表条目的键。任何帮助将不胜感激。

最佳答案

您可以在 linq 中使用一个相当简单的表达式:

var keys = from kvp1 in two_dict
where two_dict.Any(kvp2 => kvp2.Key != kvp1.Key
&& kvp2.Value.SequenceEqual(kvp1.Value))
select kvp1.Key;

但是,这并不能提供最佳性能,因为它将搜索整个字典 n次,其中 n是字典中的条目数。

如果您只查看到目前为止已经查看过的项目,您可以获得稍微更好的性能。这样,平均你只浏览字典的一半 n次,所以理论上它的速度是原来的两倍。不幸的是,我不认为有一种好方法可以纯粹使用 linq 来做到这一点。

public static IEnumerable GetDuplicates(IDictionary<string, List<string>> dict)
{
var previousItems = new List<KeyValuePair<string, List<string>>>(dict.Count);
var matchedItems = new List<bool>();
foreach (var kvp in dict)
{
var match = previousItems.Select((kvp2, i) => Tuple.Create(kvp2.Key, kvp2.Value, i)).FirstOrDefault(t => kvp.Value.SequenceEqual(t.Item2));
if (match != null)
{
var index = match.Item3;
if (!matchedItems[index])
{
yield return match.Item1;
matchedItems[index] = true;
}
yield return kvp.Key;
}
else
{
previousItems.Add(kvp);
matchedItems.Add(false);
}
}
}

你可以这样调用这个函数:

var keys = GetDuplicates(two_dict);

关于c# - 查询值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30692827/

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