一次班轮代码挑战

问题描述 投票:0回答:3

我正在尝试为以下代码编写一个单行代码:

if (a.Count() == n)
{
    return a;
}
else if (a.Count() > n)
{
     Array.Resize(ref a, n);
     return a;
}
else
{
    return a.Concat(Enumerable.Repeat(0, n - a.Count())).ToArray();
}

到目前为止我已经尝试过:

return a.Count() == n ? a :
 (a.Count() > n ? Array.Resize(ref a, n) : 
 a.Concat(Enumerable.Repeat(0, n - a.Count())).ToArray());

但是正如你所看到的,它无法编译,我无法找到一种方法用一个衬垫替换以下代码:

Array.Resize(ref a, n);
return a;

任何帮助将不胜感激。谢谢。

c#
3个回答
6
投票
return a.Concat(Enumerable.Repeat(0,n)).Take(n).ToArray();

Array.Resize(ref a, n); return a;

2
投票

使用

Take
方法代替
Array.Resize
怎么样:

return a.Count() == n ? a :
 (a.Count() > n ? a.Take(n).ToArray() : 
  a.Concat(Enumerable.Repeat(0, n - a.Count())).ToArray());

0
投票

使用 C# 12

此解决方案利用了 C# 扩展和范围运算符。

a.Length < n ?[..a, ..new int[n - a.Length]] : a[..n]

检查输入长度...

如果需要填充,请使用扩展运算符连接输入数组和 0 数组。

如果数组太长,请使用切片运算符从末尾删除多余的值。

© www.soinside.com 2019 - 2024. All rights reserved.