gpt4 book ai didi

c# - 使用 LINQ 查找已排序的对象列表中的间隙?

转载 作者:行者123 更新时间:2023-12-01 22:05:03 25 4
gpt4 key购买 nike

问题:我有一个 wpf DataGrid,它绑定(bind)到我的自定义模型类中的对象列表。我需要满足以下要求:

  • 此列表中只有一定数量的模型(例如,考虑 8 名玩家的在线电脑游戏)
  • 每个模型都有自己唯一的 ID
  • 可以在运行时将模型添加到列表中或从列表中删除
  • 初始化时,每个模型应从列表中获取最低的可用 ID
  • 我不想在每次添加新模型时迭代列表
  • 所有这些都需要在后端进行,因此我无法使用任何 xaml 代码(这也是我没有设置 wpf 标记的原因)

我正在寻找类似于 this question 的东西,但我很难将列表转换为与 Enumerable.Except 方法兼容的列表。

这是一个小例子:

型号:

public class MyModel
{
public MyModel(int mID, string mName, string mScore)
{
ID = mID;
Name = mName;
Score = mScore;
}
public int ID;
public string Name;
public string Score;
}

尝试将免费 ID 最低的新模型添加到我的列表中

  List<MyModel> list = new List<MyModel>();
list.Add(new MyModel(0, "Rodney", "189"));
list.Add(new MyModel(1, "Janet", "169"));
list.Add(new MyModel(2, "John", "110"));
list.Add(new MyModel(3, "Samantha", "160"));
list.Add(new MyModel(4, "Daniel", "156"));
list.Add(new MyModel(5, "Jack", "89"));

list.RemoveAll(x => x.ID == 1);
var result = Enumerable.Range(list.Min(m => m.ID), list.Count).Except(list).First();
list.Add(new MyModel(result, "Carolyn", "159")); //Should be 1

我可能必须使用某种 lambda 表达式,就像我必须使用 list.Min() 方法一样,但我已经花了很长时间才能做到这一点。

最佳答案

问题在于您比较两种不同类型的对象。 Enumerable.Range(list.Min(m => m.ID), list.Count) 是 0 到 5 之间整数的枚举,当您使用 Except(list) code>,该列表由 MyModel 对象组成。

您可能想要提取 id:

var result = Enumerable.Range(list.Min(m => m.ID), list.Count).Except(list.Select(m => m.ID)).First();

关于c# - 使用 LINQ 查找已排序的对象列表中的间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54889474/

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