Чего мне не хватает при попытке выполнить эту многомерную вставку списка? - PullRequest
0 голосов
/ 11 сентября 2011

Я пытаюсь создать многомерный список, к которому можно получить доступ и установить его следующим образом:

myObjectVar[1,2,3] = new MyObject();

Я перегрузил [,,] следующим образом, но вставки никогда не запускаются.Как правильно проверить, существует ли индекс, потому что приведенный ниже код не работает.

public myObject this[int x, int y, int z] {
    get { 
    return _myObject[x][y][z]; 
}

    set { 
        if(_myObject.Count < x){
            _myObject.Insert(x, new List<List<myObject>>());
        }

        if(_myObject[x].Count < y){
            _myObject[x].Insert(y, new List<myObject>());
        }

        if(_myObject[x][y].Count < z){
            _myObject[x][y][z].Insert(z, value);    
        }
        else{
            _myObject[x][y][z] = value;    
        }
    }
}

1 Ответ

2 голосов
/ 11 сентября 2011

Я предполагаю, что вы хотите создать что-то вроде многомерного массива, в котором вам не нужно указывать границы, и который расширяется при установке элементов.

В этом случае, что не так с вашим кодомэто то, что вы используете Insert().Этот метод можно использовать для вставки элементов в середине существующего списка, но не за его пределами.Таким образом, если у вас есть пустой список, вы не можете вставить что-либо в позицию 2.

. Если вы хотите это сделать, вы должны расширить списки вручную, вызвав Add() в цикле.

Но если вы ожидаете очень разреженную структуру (то есть большинство элементов не заданы), вам, вероятно, следует использовать что-то вроде Dictionary<int, Dictionary<int, Dictionary<int, T>>>.

...