Как заполнить существующий массив с помощью Linq IEnumerable? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть пустой массив из двадцати элементов.

Например, мы просто используем простой массив int

public int[] Integers = new int[20];

Тогда у меня есть база данных, в которой хранится множество элементов

public int[] Database = new int[] {
    1, 2, 3, , ..., 1000
}

Я хотел бы поместить некоторые элементы из базы данных в мой массив

в Imperative, который я мог бы просто сделать:

// loop all my slots
for (int = 0; i < Integers.Length; i++) {

    // If database index of i is empty, then done this loop
    // correction: I'm putting null in case database type is not int
    if(Database[i] == null) {
        break;
    }
    // but when there's still something in database, fill it to current Integers[i]
    else {
        Integers[i] = Database[i] 
    }
}

Но я хотел сделать это в Linq, используя Select и ForEach, однако foreach не имеет индекса i.

Примечание: я делаю игровой слот инвентаря в игре, поэтому в моем интерфейсе можно было увидеть только двадцать предметов внутри персонажа ввремя, оно также включает в себя нумерацию страниц.В настоящее время я делаю:

for (int i = 0; i < _slots.Count; i++)
    _slots[i].SetItem(i < InventoryItems.Count ? InventoryItems[i] : null);

с setItem в качестве побочных эффектов;

1 Ответ

3 голосов
/ 24 сентября 2019

Просто опустите null s:

Integers = Database.Where(i => i != null).ToArray();

Обратите внимание, что если вы хотите проверить массив null в int, вам нужно сделать его int? (обнуляемый тип):

public int?[] Integers = new int[20];

public int?[] Database = new int[] {
  1, 2, 3, , ..., 1000
}

На самом деле, Integer может быть int[], так как вы выбираете ненулевые значения:)

ПРИМЕЧАНИЕ : с вашим кодом вы естьочень склонен к индексированию вне диапазона исключений, так как вы применяете одинаковое индексирование к обоим массивам.

...