C# 如何使用Linq IEnumerable填充现有数组?
我有一个20项插槽的数组,它是空的 例如,我们只使用简单的int数组C# 如何使用Linq IEnumerable填充现有数组?,c#,linq,for-loop,iteration,C#,Linq,For Loop,Iteration,我有一个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+
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]
}
}
//循环我的所有插槽
for(int=0;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);
for(int i=0;i<\u slots.Count;i++)
_插槽[i].SetItem(i
以setItem作为副作用 只需省略
null
s:
Integers = Database.Where(i => i != null).ToArray();
请注意,如果要在int
数组中检查null
,则需要将其设置为int?
(可为null的类型):
实际上,Integer
可以是int[]
,因为您选择了非空值:)
注意:对于现有代码,您很容易索引超出范围异常,因为您对两个数组应用相同的索引。只需忽略
null
s:
Integers = Database.Where(i => i != null).ToArray();
请注意,如果要在int
数组中检查null
,则需要将其设置为int?
(可为null的类型):
实际上,Integer
可以是int[]
,因为您选择了非空值:)
注意:使用现有代码,您很容易索引超出范围异常,因为您对两个数组都应用了相同的索引。我不确定您要求的是什么?您能告诉我们为什么不使用
var Integers=Database.Concat(Enumerable.Repeat(0,20)).Take(20).ToArray()代码>?这将从数据库中获取前20个条目
,并根据需要填充零。我可以做整数吗。选择((x,I)=>{x=Database[I];返回x;})
;这是可能的吗?你试过我第一次评论中的建议了吗?我暂时退出,稍后再试,但我认为如果我把它放在20大小的数组中可能会出错。我不确定你要的是什么?你能告诉我们为什么你不想使用var Integers=Database.Concat(Enumerable.Repeat(0,20)).Take(20.ToArray()代码>?这将从数据库中获取前20个条目
,并根据需要填充零。我可以做整数吗。选择((x,I)=>{x=Database[I];返回x;})
;这可能吗?你试过我第一次评论中的建议了吗?我暂时退出,稍后再试,但我认为如果我把它放在20码的数组中可能会出错。索引超出范围注释非常有用,谢谢,我一直在想为什么我会一直得到它。@Kevintanudja如果我的回答对你有帮助,你应该接受它(左边绿色复选标记)和可选的向上投票:)@KevinTanudjaja我不能,你必须解释你想要什么和什么不起作用。这应该是另一个问题,而不是注释。好的,对不起,您的代码Integers=Database.Where(i=>i!=null).ToArray()代码>会出错吗?将结果放入20大小的数组可以吗?@KevinTanudjaja不将整数初始化为空数组,只需使用此代码初始化即可。如果你按照你的方式初始化它,你需要调整它的大小。哦,索引超出范围注释非常有用,谢谢,我一直想知道为什么我会一直得到它。@Kevintanudja如果我的答案对你有帮助,你应该接受它(左边绿色的复选标记)并且可以选择向上投票:)@Kevintanudja我不能,你必须解释你想要什么,什么不起作用。这应该是另一个问题,而不是注释。好的,对不起,您的代码Integers=Database.Where(i=>i!=null).ToArray()代码>会出错吗?将结果放入20大小的数组可以吗?@KevinTanudjaja不将整数初始化为空数组,只需使用此代码初始化即可。如果你用你的方式初始化它,你需要调整它的大小。