首页 > 解决方案 > 如何管理具有位置的列表中的项目

问题描述

在行程中,您可以定义起点和目的地,还可以添加航点。

添加航点时,如果已经有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; }
}

标签: c#

解决方案


将元素插入到 List 中指定索引处。列表.插入

有了这个,也许你可以将航点插入到航点位置的列表中。请记住,您可能需要处理索引从 0 开始而您的航点位置可能从 1 开始的事实。

_waypoints.Insert(waypoint.Position - 1, waypoint);

推荐阅读