How to build an Inventory where the items you pick up don't go in the slots in order but instead to a SPECIFIC slot in the inventory

I am building an inventory, at the moment the character goes along picking up objects and they are placed in the inventory in the order they are picked up. I want to be able to have an inventory with a specific slot for every item. So for example I have items A-Z, A should go in the position A even if that’s the last item i pick up.

INVENTORY

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Inventory : MonoBehaviour
{
    public Image[] itemImages = new Image[numItemSlots];
    public Item[] items = new Item[numItemSlots];
    public const int numItemSlots = 4;



    public void AddItem(Item itemToAdd)
    {
        for (int i = 0; i < items.Length; i++)
        {
            if (items *== null)*

{
items = itemToAdd;
itemImages*.sprite = itemToAdd.sprite;*
itemImages*.enabled = true;*
return;
}
}
}
public void RemoveItem(Item itemToRemove)
{
for (int i = 0; i < items.Length; i++)
{
if (items == itemToRemove)
{
items = null;
itemImages*.sprite = null;*
itemImages*.enabled = false;*
return;
}
}
}
}
PICKED UP ITEM

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

public class PickedUpItemReaction : DelayedReaction {

public Item item;

private Inventory inventory;

protected override void SpecificInit()
{
inventory = FindObjectOfType();
}

protected override void ImmediateReaction()
{
inventory.AddItem(item);
}
}

A bad way ,but easy, to do this is:

public void AddItem(Item itemToAdd)
{
    int id = itemToAdd.id;
    if (items.Lenght <= id)
        return;
    if (items[id] == null)
    {
        items[id] = itemToAdd;
        itemImages[id].sprite = itemToAdd.sprite;
        itemImages[id].enabled = true;
        return;
    }
}
public void RemoveItem(Item itemToRemove)
{
    int id = itemToRemove.id;
    if (items.Lenght <= id)
        return;
    if (items[id] != null)
    {
        if(items[id] == itemToRemove)
        {
            items[id] = null;
            itemImages[id].sprite = null;
            itemImages[id].enabled = false;
            return;
        }
    }
}

ofcourse for this to work there are some requirements, first one is the Item class to contain an int id field and the id you set for each item to be same as the index of the items array ,which represents each slot, you wanted to be added to. (ex. lets say you have an item coin and you want to be added on the 3rd slot the coin.id should be 2, keep in mind indexes start from 0). Cheers.

Can u help me pls by a Inventory there is the Object Item not found what i have to do?