Example #1
0
        /// <summary>
        /// (3)加工データ取得
        /// 各インデックスが参照するデータのインデックス情報とデータ自体をそのインデックスに並び替えて返す
        /// (インデックスが1つのデータを参照する場合はこちら)
        /// </summary>
        /// <returns></returns>
        public (List <ReferenceDataIndex>, List <T>) GetDirectReferenceData()
        {
            var referenceDataList = new List <ReferenceDataIndex>();
            var sortDataList      = new List <T>();

            // インデックスごとのデータ参照開始と数の情報を作成
            int start = 0;

            for (int i = 0; i < indexToDataIndexList.Count; i++)
            {
                var work = indexToDataIndexList[i];

                var refdata = new ReferenceDataIndex();
                refdata.startIndex = start;
                refdata.count      = work.Count;
                referenceDataList.Add(refdata);

                // データは単純に参照順番で並べる
                foreach (var dataIndex in work)
                {
                    sortDataList.Add(dataList[dataIndex]);
                }

                start += work.Count;
            }
            //int count = start;

            return(referenceDataList, sortDataList);
        }
Example #2
0
        /// <summary>
        /// (3)加工データ取得
        /// 各インデックスが参照するデータのインデックス情報と、それに対応するデータインデックスを一次元配列に格納したもの、
        /// および各データが参照するデータインデックス配列のインデックス情報を返す
        /// (インデックスが複数のデータを参照する場合はこちら)
        /// </summary>
        /// <returns></returns>
        public (List <ReferenceDataIndex>, List <int>, List <List <int> >) GetIndirectReferenceData()
        {
            var referenceDataList = new List <ReferenceDataIndex>();

            // インデックスごとのデータ参照開始と数の情報を作成
            int start = 0;

            for (int i = 0; i < indexToDataIndexList.Count; i++)
            {
                var work = indexToDataIndexList[i];

                var refdata = new ReferenceDataIndex();
                refdata.startIndex = start;
                refdata.count      = work.Count;
                referenceDataList.Add(refdata);

                start += work.Count;
            }
            //int count = start;

            // インデックスごとの参照データインデックスを一次元配列にする
            List <int> dataIndexList = new List <int>();

            foreach (var work in indexToDataIndexList)
            {
                foreach (var dataIndex in work)
                {
                    dataIndexList.Add(dataIndex);
                }
            }

            // データのインデックスに対応する参照インデックス情報を作成
            List <List <int> > dataToDataIndexList = new List <List <int> >();

            for (int dataIndex = 0; dataIndex < dataIndexToIndexList.Count; dataIndex++)
            {
                var indexList          = dataIndexToIndexList[dataIndex];
                var dataIndexIndexList = new List <int>();

                foreach (var index in indexList)
                {
                    start = referenceDataList[index].startIndex;
                    int dataIndexIndex = indexToDataIndexList[index].IndexOf(dataIndex);

                    dataIndexIndexList.Add(start + dataIndexIndex);
                }

                dataToDataIndexList.Add(dataIndexIndexList);
            }

            return(referenceDataList, dataIndexList, dataToDataIndexList);
        }