C# 将项目从列表复制到具有固定大小的数组
我有一个C# 将项目从列表复制到具有固定大小的数组,c#,arrays,list,C#,Arrays,List,我有一个列表,它返回n个值 我必须将这些值存储到一个固定长度为10 如果超过10个项目,则会切断电源 如果少于10个项目,则可用数字0 我的方法 int[] result = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; List<int> items = Enumerable.Range(1, 5).ToList(); items.CopyTo(result); // 1,2,3,4,5,0,0,0,0,0 int[]result={0,0,0,0,0,
列表
,它返回n个值
我必须将这些值存储到一个固定长度为10
- 如果超过10个项目,则会切断电源
- 如果少于10个项目,则可用数字
0
int[] result = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
List<int> items = Enumerable.Range(1, 5).ToList();
items.CopyTo(result); // 1,2,3,4,5,0,0,0,0,0
int[]result={0,0,0,0,0,0,0,0,0};
列表项=可枚举的.Range(1,5).ToList();
items.CopyTo(结果);//1,2,3,4,5,0,0,0,0,0
但这在项目>10中失败
有没有一种方法可以立即或至少用不到3行代码完成此操作?您可以使用以下方法剪切阵列:
你也许也想读一些关于你的东西。这跳过了记录
Enumerable.Range(1, inputCount * 2).Skip(10).Take(inputCount).ToList().CopyTo(result);
// 10,11,12,13,14,15,16,17,18,19
// 20 items as input. skipped 10
foreach (var item in result)
{
Console.WriteLine(item);
}
您可以使用与属性相结合的方法始终选择最多可容纳到数组中的元素:
var result = new int[10];
var items = Enumerable.Range(1, 11);
items.Take(result.Length).ToList().CopyTo(result);
当小于result.Length
项(本例中为10项)时,空插槽将填充default(int)
,即0
List items=Enumerable.Range(1,5).ToList();
List<int> items = Enumerable.Range(1, 5).ToList();
int[] result = items.Take(10).Concat(Enumerable.Repeat(0, Math.Max( 10 - items.Count,0))).ToArray();
int[]result=items.Take(10).Concat(Enumerable.Repeat(0,Math.Max(10-items.Count,0))).ToArray();
您可以删除换行符…不,如果OP列表中的项目超过10个,则此代码无效。items.CopyTo(0,result,0,Math.Min(items.Count,result.Length))
。超载FTW.@Dr.Snail我撤回了我的最后一票。请注意,您的3行代码中,只有2行是“将列表项复制到数组”,另一行只是初始化列表,您可能会将其作为参数接收,如果这是一种方法,好的,我不知道为什么不将可枚举项复制到固定大小的现有数组中。或者你是说用.ToArray()
代替.ToList()
?是的。我不认为他指的是现有的数组,因为无论如何它都会被覆盖。所以我想说,ToArray()
而不是ToList().CopyTo(result)
就足够了。@Adrian-hmm,我相信OP想将枚举表的项复制到一个固定大小的现有数组中,如果枚举表包含的项多于数组的大小,.CopyTo()
将失败(ArgumentException
将被抛出)。我.ToList()
ed这样我就可以访问.CopyTo()
,我确实可以使用.ToArray()
,通过修改最后一行到items.Take(result.Length).ToArray().CopyTo(result,0)
请详细说明你的答案。只有代码的答案被认为是低质量的。
List<int> items = Enumerable.Range(1, 5).ToList();
int[] result = items.Take(10).Concat(Enumerable.Repeat(0, Math.Max( 10 - items.Count,0))).ToArray();