其他分享
首页 > 其他分享> > 无限循环 之 数据适配器 DataApdater

无限循环 之 数据适配器 DataApdater

作者:互联网

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DataApdater<T>
{
    #region 字段

    //保存的所有数据
    public List<T> allData = new List<T>();    //不知道什么类型  所以是泛型
    //保存当前正在显示的数据
    public LinkedList<T> currentShowData = new LinkedList<T>();   //LinkedList 链表

    #endregion


    #region 方法

    public T GetHeaderData()
    {
        //判断总数据的数量
        if (allData.Count == 0) {
            return default(T);
        }
        //特殊情况
        if ( currentShowData.Count == 0 )
        {
            T header = allData[0];
            currentShowData.AddFirst(header);
            return header;
        }

        //currentShowData 当前正在显示的第一个数据
        T t = currentShowData.First.Value;
        int index = allData.IndexOf(t);
        if (index != 0)                          //判断数据不为空时
        {
            T header = allData[index - 1];
            currentShowData.AddFirst(header);    //将数据加到头部
            return header;
        }

        return default(T);                       //如果等于零,默认值为空
    }

    public bool RemoveHeadData() {
        //移除 currentShowData 当前正在显示的第一个数据的第一个数据
        if (currentShowData.Count == 0)
        {
            return false;
        }
        currentShowData.RemoveFirst();
        return true;
    }

    public T GetLastData() {
        //判断总数据的数量
        if (allData.Count == 0)
        {
            return default(T);
        }
        //特殊情况
        if (currentShowData.Count == 0 || currentShowData.Count == 1)
        {
            T l = allData[0];
            currentShowData.AddLast(l);
            return l;
        }

        //获取 currentShowData 最后一个的下一个

        T last = currentShowData.Last.Value;
        int index = allData.IndexOf(last);

        if (index != allData.Count - 1)
        {
            T now_last = allData[index + 1];
            currentShowData.AddLast(now_last);
            return now_last;
        }
        return default(T);
    }

    public bool RemoveLastData() {
        //移除 currentShowData 最后一个
        if (currentShowData.Count == 0 || currentShowData.Count == 1) { return false; }
        currentShowData.RemoveLast();
        return true;
    }

    #endregion

    #region 数据管理

    public void InitData(T[] t) {
        allData.Clear();
        currentShowData.Clear();
        allData.AddRange(t);
    }

    public void InitData(List<T> t  )  //重载函数
    {
        InitData(t.ToArray());
    }

    public void AddData(T[] t)          //添加数据
    {
        allData.AddRange(t);
    }

    public void AddData(List<T> t)
    {
        AddData(t.ToArray());
    }
    #endregion

}

 

标签:Count,return,适配器,header,无限,currentShowData,DataApdater,public,allData
来源: https://www.cnblogs.com/gyjldlhiahia/p/14823712.html