【发布时间】:2020-01-24 11:02:38
【问题描述】:
我有一个包含 20 个项目的数组,但它是空的。
例如我们只使用简单的 int 数组
public int[] Integers = new int[20];
然后我有一个包含很多项目的数据库
public int[] Database = new int[] {
1, 2, 3, , ..., 1000
}
我想将数据库中的一些项目放入我的数组中
在命令式中我可以这样做:
// 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。
注意:我正在游戏中制作一个库存 UI 物品槽,因此我的 UI 中一次只能看到角色内部的 20 个物品,它还包括分页。我目前正在做:
for (int i = 0; i < _slots.Count; i++)
_slots[i].SetItem(i < InventoryItems.Count ? InventoryItems[i] : null);
以 setItem 作为副作用;
【问题讨论】:
-
我不确定您要的是什么?
-
你能告诉我们你为什么不想使用
var Integers = Database.Concat(Enumerable.Repeat(0, 20)).Take(20).ToArray();吗? 这将从Database获取前20 个条目,并根据需要用零填充。 -
我可以做
Integers.Select( (x,i ) => { x = Database[i]; return x; });这可能吗? -
您是否尝试过我第一条评论中的建议?
-
我现在不在了,我稍后再试试,但是我认为如果我将它放入 20 大小的数组中可能会出错
标签: c# linq for-loop iteration