c# - 从列表中删除对象
问题描述
我有以下清单-
public class edgeData
{
public string source { get; set; }
public string target { get; set; }
}
var edgeList = new List<edgeData>();
var linkCount = 1;
我想edgeData
从edgeList
源集体出现小于或等于linkCount
.
例如建立我的 edgeData -
var newEdge = new edgeData();
newEdge.source = "James";
newEdge.target = 1;
edgeList.Add(newEdge);
var newEdge = new edgeData();
newEdge.source = "Greg";
newEdge.target = 2;
edgeList.Add(newEdge);
var newEdge = new edgeData();
newEdge.source = "James";
newEdge.target = 3;
edgeList.Add(newEdge);
然后处理删除出现小于或等于的条目linkCount
-
public List<edgeData> RemoveLinks(List<edgeData>() edgeList, int linkCount)
{
var updatedEdgeData = new List<edgeData>();
// logic
return updatedEdgeData;
}
因此,在示例中,包含“Greg”作为源的条目将被删除,因为他只出现过一次,等于 linkCount。
我尝试使用 for 循环执行此操作,但这很快就变得非常难看,并且相信 Linq 是最好的选择,但是我该如何实现呢?
解决方案
您可以执行以下操作
edgeList.GroupBy(x=>x.source)
.Where(x=>x.Count()>linkCount)
.SelectMany(x=>x)
.ToList();
您需要Group
按来源过滤掉项目少于linkCount
.
另请注意,根据 OP,edgeData.target
是一个字符串,但您的代码将其显示为数字。希望这是一个错字。
更新
正如 Harald 指出的那样,如果组的大小很大,您可以选择使用,
edgeList.GroupBy(x=>x.source)
.Where(x=>x.Skip(linkCount).Any())
.SelectMany(x=>x)
.ToList()
推荐阅读
- vba - PATHS:尾随反斜杠还是不尾随反斜杠?
- powershell - Powershell - 合并两个 Note 属性
- events - rpi4 add_event_detect 事件触发器
- javascript - 在 React Native 中更新屏幕上的内容会使动画组件冻结
- c# - 从 VB6 中读取 C# dll
- sql - 操作数类型错误:日期与 int 不兼容
- css - CSS Grid Nesting 导致子网格从父网格单元格中溢出
- amazon-web-services - 是否有任何 RDS 的 cloudwatch 警报指标来检查连接问题?
- apache-kafka - 如何迁移 Confluent 的 Apache Kafka Schema Registry < 5.2.0?
- mysql - 无法启动 mysql docker 容器