c# - 在列表 C# 中查找最佳匹配实例的最佳实践

标签 c# list matching

对于你们大多数人来说,这当然是一个非常简单的问题。 但我目前正在努力寻找解决方案。

假设您有一个猫列表 (List),其中每只猫都有一个婴儿列表 (Kitten)

public class Cat
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Race { get; set; }
        public bool Gender { get; set; }
        public List<Kitten> Babys { get; set; }  
    }

public class Kitten
    {
        public string Name { get; set; }
        public double Age { get; set; }
        public bool Gender { get; set; }
    }

现在我想找到最符合给定要求的猫。一只猫很可能只满足 3 个要求中的 2 个。我只是想找到最符合我要求的猫。

我的要求可能在哪里:

  • 名字必须是“Micky”
  • 42岁
  • 有一只名叫“Mini”的小猫

我的实际解决方案是比较所有属性并选择具有最多匹配属性的属性。但这不是通用的,我相信有很多更好的方法来做到这一点。

提前致谢

最佳答案

好吧,我没有机会测试这个解决方案,但你可以试试这个:

假设您有一个猫列表:

var cats = new List<Cat>();

现在您已经定义了您的标准:

var desiredName = "Micky";
var desiredAge = 42;
var desiredKitten = "Mini";

然后你必须得到你想要的猫:

var desiredCat = cats
        .Select(c => new {
            Rating = 
                Convert.ToInt32(c.Age == desiredAge) +       // Here you check first criteria
                Convert.ToInt32(c.Name == desiredName) +     // Check second
                Convert.ToInt32(c.Babys.Count(b => b.Name == desiredKitten) > 0),   // And the third one
            c })
        .OrderByDescending(obj => obj.Rating) // Here you order them by number of matching criteria
        .Select(obj => obj.c) // Then you select only cats from your custom object
        .First(); // And get the first of them

请检查这是否适合您。 如果您需要更具体的答案或一些编辑,我可以添加。

关于c# - 在列表 C# 中查找最佳匹配实例的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284776/

相关文章:

list - Haskell 列表中的第二个最小值

翻转列表/元组的pythonic方式

Java 正则表达式 : trouble extracting word phrase

c# - 我们可以继续在服务器端按需创建 Azure 共享访问签名吗?

c# - 当 IList by ref 是方法签名时,通过 ref 传递 List

c# - 有没有办法让 Resharper 忽略未使用的引用?

java - NYSIIS 中 BOSCH 的正确编码是什么?

c# - 从 Azman 获取属于角色的任务列表

c# - 在 List<string> 中查找重复项

image-processing - 提高 OpenCV 中 cvMatchShapes 的匹配精度