将项目从列表复制到固定大小的数组

时间:2019-04-10 12:07:47

标签: c# arrays list

我有一个List<int>,它返回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

但这在项目> 10上失败 有没有办法立即执行此操作,或者至少用少于3行的代码执行此操作?

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();