c# - 如何管理具有位置的列表中的项目
问题描述
在行程中,您可以定义起点和目的地,还可以添加航点。
添加航点时,如果已经有1个或多个航点,用户可以选择要放置航点的位置,如果不选择位置将是最后一个,编辑航点时也会能够改变他的位置,当删除任何航点时,必须重新组织列表。
挑战在于如何在列表中创建正确的航路点管理,以便在流程结束时保存具有组织航路点的列表。我从未对列表执行过复杂的操作。
public class Itinerary : BaseEntity, IAggregateRoot
{
public Itinerary(int id, Address start, Address end, List<Waypoint> waypoints = null)
{
Id = id;
Start = start;
End = end;
_waypoints = waypoints;
}
public Itinerary()
{
}
public Address Start { get; set; }
public Address End { get; set; }
private readonly List<Waypoint> _waypoints = new List<Waypoint>();
public IReadOnlyCollection<Waypoint> Waypoints => _waypoints.AsReadOnly().OrderBy(x => x.Position).ToList();
public List<int> AvailableWaypoints()
{
List<int> waypoints = new List<int>();
for (int i = 0; i < _waypoints.Count(); i++)
{
waypoints.Add(_waypoints[i].Position);
}
return waypoints.OrderBy(x => x).ToList();
}
public void AddWaypoint(Waypoint waypoint)
{
//...
}
public void UpdateWaypoint(Waypoint waypoint)
{
//...
}
public void RemoveWaypoint(Waypoint waypoint)
{
//...
}
}
public class Waypoint : BaseEntity
{
public Waypoint(int id, Address address, int position, int itineraryId, Itinerary itinerary = null)
{
Id = id;
Address = address;
Position = position;
ItineraryId = itineraryId;
Itinerary = itinerary;
}
public Waypoint()
{
}
public Address Address { get; set; }
public int Position { get; set; }
public int ItineraryId { get; set; }
public Itinerary Itinerary { get; set; }
}
解决方案
将元素插入到 List 中指定索引处。列表.插入
有了这个,也许你可以将航点插入到航点位置的列表中。请记住,您可能需要处理索引从 0 开始而您的航点位置可能从 1 开始的事实。
_waypoints.Insert(waypoint.Position - 1, waypoint);
推荐阅读
- jquery - 如何设置fancybox minHeight 和maxHeight?
- google-cloud-platform - 是否可以使用 gcloud 凭据调用 GCP API?
- javascript - 将数组中的值添加到对象javascript
- scichart - ios的垂直堆叠轴
- javascript - w3-include-html,javascript 不适用于向元素添加和删除类
- css - 我的侧边栏小部件的样式错误
- c - Arduino 卡住和 serial.println 输出集结在一起
- php - 如何编写 Gmail 重定向 URL?
- postgresql - PostgreSQL 用户对 Apache Zeppelin 用户的权限
- html - 如何隐藏:通过悬停在子项上的父项内容之前?