用户与链列表项的交互

时间:2015-11-25 23:21:41

标签: c# list

我有以下列表项,并尝试找出一个负责用户交互的算法。

tableItems.Add (new TableItem() {Start=1000, End=4000});
tableItems.Add (new TableItem() {Start=4000, End=6000});
tableItems.Add (new TableItem() {Start=6000, End=8000});

例如,在列表中,如果用户更改了第一个项目“结束”值,该值也会影响第二个列表项的“开始”值。那必须匹配。它就像一条链子。此外,如果用户想要更改第二项“开始”值,则第一项“结束”值也必须匹配。

解决这个连锁问题的有效方法是什么?

1 个答案:

答案 0 :(得分:1)

void Main()
{
    var rangeManager = new RangeManager();
    rangeManager.SetRange(3, 6000, 9000);
    rangeManager.GetRange(3).Dump();
    rangeManager.SetRange(1, 500, 4000);
    rangeManager.GetRange(1).Dump();
}

public class RangeManager
{
    private List<int> _values;

    public RangeManager()
    {
        _values = new List<int> { 0, 1000, 4000, 6000, 8000 };
    }

    public Range GetRange(int index)
    {
        // TODO check for index out of range
        return new Range(_values[index], _values[index + 1]);
    }

    public void SetRange(int index, int start, int finish)
    {
        // TODO check for index out of range
        // TODO make sure start less than finish
        // TODO make sure start greater than previous value
        // TODO make sure finish less than next + 1 value
        _values[index] = start;
        _values[index + 1] = finish;
    }
}

public class Range
{
    public int Start { get; private set; }
    public int Finish { get; private set; }

    public Range(int start, int finish)
    {
        Start = start;
        Finish = finish;
    }
}

要了解这里发生了什么,请从Range课程开始。它只是StartFinish的持有者。

接下来,查看RangeManager课程。它封装了链式范围的管理。它将值(范围端点)保存在整数列表中(而不是Range个对象列表)。这是存储数据的更好方法,因为在更新范围时不再需要更新相邻对象。另外,请注意,使用整数比使用字符串更好。 RangeManager类还有一些方法可以帮助您操作和输出范围。

最后,看看Main方法。这显示了如何使用RangeManager并允许您测试它是否正常工作的示例。

相关问题