gpt4 book ai didi

c# - Linq List Any 无法处理泛型 List> 的值命令

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

我收到这个错误

'T' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)

尝试运行这段代码

public static List<T> FindCommon<T>(List<List<T>> lists)
{
var x = from list in lists
from option in list
where lists.All(l => l.Any(o => o.Value == option.Value))
orderby option.Value
select option;
return null;
}

测试代码

List<List<uint>> Patterns = new List<List<uint>>();
Patterns.Add(new List<uint>() { 1, 2, 3 });
Patterns.Add(new List<uint>() { 2, 3, 4 });
Patterns.Add(new List<uint>() { 2, 3, 4 });
Patterns.Add(new List<uint>() { 1, 2, 3 });
Patterns.Add(new List<uint>() { 5, 5, 5 });

List<uint> finalOffsets = FindCommon(Patterns);

应该返回1,2,3或者2,3,4

可能是 1,2,3

注意 return null; 是因为我不知道 x 会返回什么我需要它是一个列表。

最佳答案

要使您的代码编译,请删除 .Value 并使用 Equals 方法代替 ==。但是,这仍然无法满足您的需求(据我了解您的目标)。

根据我对您尝试执行的操作的理解,您想找到主列表中重复次数最多的列表。方法如下:

首先,定义一个知道如何比较列表的比较器:

public class ListEqualityComparer<T> : IEqualityComparer<List<T>>
{
public bool Equals(List<T> x, List<T> y)
{
return x.SequenceEqual(y);
}

public int GetHashCode(List<T> obj)
{
//This works. But you might want to have a
//better way for calculating the hash code
return obj.Sum(x => x.GetHashCode());
}
}

然后你可以像这样使用它:

public static List<T> FindCommon<T>(List<List<T>> lists)
{
return lists.GroupBy(x => x, new ListEqualityComparer<T>())
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.FirstOrDefault();
}

关于c# - Linq List Any 无法处理泛型 List<List<T>> 的值命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35163671/

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