【问题标题】:Initializing a one-dimensional array from other one-dimensional arrays从其他一维数组初始化一维数组
【发布时间】:2020-04-11 15:48:53
【问题描述】:

我觉得这有一个非常简单的答案,但我无法得到它,但这是我在互联网上没有找到任何相关内容后对它的看法。
本质上,我想用 C# 中的 javascript 做这样的事情:

var abc = ["a", "b", "c"]
var abcd = [...abc, "d"]

将一维数组abc的内容“传播”到另一个一维数组abcd,在初始化时添加新值。
但是,在 C# 中复制此行为将无法按预期工作:

string[] abc = { "a", "b", "c" };
string[] abcd = { abc, "d" };

我在 C# 中最接近复制的方法是使用列表,如下所示:

string[] abc = { "a", "b", "c" };
var abcd = new List<string>();
abcd.AddRange(abc);
abcd.Add("d");

我可以在上面的例子中保存一行,直接用“d”字符串初始化列表(顺序对我来说并不重要,我只是检查集合是否包含某个我正在寻找的项目),但与初始化数组相比,使用 List 本身效率非常低,因为我无意稍后修改或添加项目。
有什么办法我可以在一行中从其他一维数组初始化一维数组吗?

【问题讨论】:

标签: c# arrays initialization


【解决方案1】:

如果您正在寻找单线,您可以使用Enumerable.Append() method。如果希望abcd 的类型为字符串数组,您可以在末尾添加.ToArray()

你去吧:

string[] abcd = abc.Append("d").ToArray();

注意:Append() 方法在 .NET Framework 4.7.1 及更高版本中可用

对于 .NET Framework 4.7 或更早版本,一种方法是使用 Enumerable.Concat() method

string[] abcd = abc.Concat(new[] { "d" }).ToArray();
string[] abcde = abc.Concat(new[] { "d", "e" }).ToArray();

【讨论】:

  • 正是我想要的!
【解决方案2】:

在 1 行中:

string[] abc = { "a", "b", "c" };
var abcd = new List<string>(abc) { "d" };

列表的构造函数可以取另一个列表。

【讨论】:

  • 这很酷,但由于不必要的性能成本,我想避免使用 List。我以后不打算改变它的大小,这就是为什么我特意询问数组是否可以实现(不涉及列表)。
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2015-08-01
相关资源
最近更新 更多