public struct CursedList{
public List<int> idsToMain;
public List<int> mainToIds;
public List<TestData> main;
public int AddData(TestData testData){
var countMinusOne = main.Count-1;
main.Add(testData);
idsToMain.Add(countMinusOne);
mainToIds.Add(countMinusOne);
return countMinusOne;
}
public AddDatas(List<TestData> testDataList, List<int> ids){
var c = testDataList.Count;
for (int i = 0; i < c; i++) ids.Add(AddData(testDataList[i]));
return ids;
}
public void Clear(){
idsToMain.Clear();
mainToIds.Clear();
main.Clear();
}
public void RemoveData(int id){
var countMinusOne = main.Count-1;
var mainIndex = idsToMain[id];
if(mainIndex == countMinusOne)//last
{
main.RemoveAt(countMinusOne);
mainToIds.RemoveAt(countMinusOne);
idsToMain.RemoveAt(countMinusOne);
}else{
var lastValueMain = main[countMinusOne];
main.RemoveAt(countMinusOne);
main[mainIndex] = lastValueMain;
var lastValueMainToId = mainToIds[countMinusOne];
mainToIds.RemoveAt(countMinusOne);
mainToIds[mainIndex] = lastValueMainToId;
var lastValueIdToMain = idsToMain[countMinusOne];
idsToMain.RemoveAt(countMinusOne);
idsToMain[id] = lastValueIdToMain;
}
}
public TestData GetData(int id) => main[idsToMain[id]];
}
public struct TestData{
public float grandeValeur;
public float grandeValeur2;
public float grandeValeur3;
}