/// <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); }
/// <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); }