我有一个List<int>
,它返回n个值。
我必须将这些值存储到固定长度为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
但这在项目> 10
上失败
有没有办法立即执行此操作,或者至少用少于3行的代码执行此操作?
答案 0 :(得分:4)
您可以结合使用Enumerable.Take()
方法和Array.Length
属性,以选择最多(最多)许多元素可以放入数组:
var result = new int[10];
var items = Enumerable.Range(1, 11);
items.Take(result.Length).ToList().CopyTo(result);
当少于result.Length
个项目(在此示例中为10个)时,空白位置将填充default(int)
,即0
。
答案 1 :(得分:2)
您可以使用Enumerable.Take(int count)
剪切数组:
int inputCount = 10;
int[] result = new int[inputCount];
Enumerable.Range(1, inputCount / 2).Take(inputCount).ToList().CopyTo(result);
// 1,2,3,4,5,0,0,0,0,0
// 5 items as input
foreach (var item in result)
{
Console.WriteLine(item);
}
Enumerable.Range(1, inputCount * 2).Take(inputCount).ToList().CopyTo(result);
// 1,2,3,4,5,6,7,8,9
// 20 items as input
foreach (var item in result)
{
Console.WriteLine(item);
}
您也许也想阅读有关Enumerable.Skip(int count)
的内容。这将跳过记录。
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);
}
答案 2 :(得分: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();