How to Add and retreive Items from a nested list

Here is an example of a type of game I would like to create that can apply to many different scenarios.
In this example lets use shopping malls and stores

I have two Scenes, overview, and mall

the overview scene allows user to place a single type of game object (shopping malls) at various locations on the overview scene

the mall scene allows user to place multiple different game objects (stores: ie best buy, Mc Donalds, EBgames etc) at various positions in the mall scene

For Example:
Place mall 1 mall 2 and mall 3 at differnt positions in the overview scene.
Click on mall 1 and go to mall scene for mall 1
Place stores at various locations in mall 1.
Click on overview to go back to overview and then click on mall 2 and do the same.

I place GameControl script in both scenes so that I can add store, mall info and retrieve store, mall info from both scenes

I have a mall class that contains name of the mall and a list of stores

the store class contains transform and position of store

from the overview script I am able to add a mall to the list

    private List<STORE> store = new List<STORE>();
    GameControl.control.malls.Add (new MALL (mall_label, store));

however I am not sure how to add a store to the mall from the mall scene
Also I am not sure How I can iterate through all the malls and show positions of all stores

This is the Overview script

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

public class OVERVIEW {
    public string mall_name;
    public List<STORE> store = new List<STORE>();


   
    public OVERVIEW (string new_mall_name, List<STORE> new_store)
    {
        mall_name = new_mall_name;
        store = new_store;
        }
}

this is the Store Script

using UnityEngine;
using System.Collections;

public class STORE {
    public Transform obj;
    public Vector3 obj_pos;



   
    public STORE (Transform new_object, Vector3 new_object_pos)
    {
        obj = new_object;
        obj_pos = new_object_pos;
        }
}

this is the GameControl Script

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

public class GameControl : MonoBehaviour {

    public static GameControl control;
    public List<OVERVIEW> malls = new List<OVERVIEW>();
    public string mall_label;



    void Awake() {
        if (control ==null)
        {
            DontDestroyOnLoad(gameObject);
            control=this;
        }
        else if (control !=this)
        {
            Destroy(gameObject);
        }
   
        }

    }

Well, if I were you, I had one script for mall (something like this, not tested) and I add some events: https://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

using UnityEngine;
using System.Collections;
public class MALL {
    public List<STORE>  stores;
    private string mallName;
    public string mallLabel { get { return mallName; } }   
   
    public delegate void OnAddStore(STORE _store);
    public delegate void OnRemoveStore(STORE _store);

    public MALL (string mall_label, List<STORE> _stores = null)
    {
        this.mallName = mall_label;
        this.stores = _stores == null ? new List<STORE>() : _stores;
        }

   public void AddStore( STORE newStore )
   {
        this.stores.add( newStore );
        if( OnAddStore != null ) OnAddStore(newStore);
   }
   
   public STORE GetLastStore()
   {
       STORE _store = this.stores.Count > 0 ? return this.stores[this.stores-1] : null; 
    }
//    ...remove here

}

and in your Mall, just add your events/delegates and just use your positions to place them, something like this

//your mall is OVERVIEW, so just change the class if you dont want rename
//if you use delegate/events you just run this once
foreach( Mall mall in GameControl.malls )
{
   foreach( STORE store in mall.stores )
   {
      Instantiate( store.obj, obj.position, Quaternion.identity );
   }
}

//so if you want add new store for your scene, im assuming you're loadlevelasync, just do a function with delegate

//somewhere add your delegate like this
mall.OnAddStore += NewStore;
//and your function like this
void NewStore(STORE _store)
{
         Instantiate( _store.obj, _obj.position, Quaternion.identity );
}

It’s a complicated question, because have infinite ways to do. Expected can be clear and light you =)

Thanks for this. I think I understand but I am having a few issues

I get a stack overflow error when I try to do this in another script

foreach( Mall mall in GameControl.malls )
Debug.Log(mall.mallLabel);

but in the mall class if I change

publicstring mallLabel{ get {return mallName; }}

to

publicstring mallLabel;

and then change

this.mallName= mall_label;

to

mallName= mall_label;

I no longer get stack overflow error

Also in this line below there is a lot of stuff happening and I am not sure how it works
is there any documentation to this type of statement

this.stores= _stores ==null?new List<STORE>(): _stores;

Nice. =)

in this line, is nothing else than an “if statement”

this.stores= _stores ==null?new List<STORE>(): _stores;

is equal

if( _stores == null )
{
  this.stores = new List<STORE>();
}
else
{
  this.stores = _stores;
}