【发布时间】:2020-11-25 19:24:18
【问题描述】:
我正在尝试以有效的方式解决在线挑战。给定int的数组,我基本上必须以某种格式输出一个字符串。
我必须使字符串看起来像:(123) 456-7890(保证输入数组的长度正确)。
我发现了新的 C# 索引和范围,并尝试了类似的方法:
public static string GenerateOutput(int[] numbers)
{
return $"({numbers[0..2]}) {numbers[3..5]}-{numbers[6..9]}";
}
但这不会返回所需的结果。如何将它们转换为字符串并返回正确的输出?
【问题讨论】:
-
所以数组中的这些数字 - 它们可以有像 -38787123 这样的值吗?他们定义的范围是多少?
-
@MatthewWatson 不,该数组包含 10 个整数,其值为 0 到 9。
-
您可以将所有数字转换为字符串以使用索引和格式 (
numbers.Select(i => i.ToString())),但生成的解决方案效率不高。一个有效的解决方案将是一个冗长但明显的最小化分配的解决方案(例如,Span<char> s = stackalloc char["(000) 000-0000".Length]; s[0] = '('; s[1] = (char) (numbers[0] + '0'); ... return s.ToString();--new StringBuilder("(000) 000-0000"),如果你不想对Span过于花哨)。当然,值得牢记的是,过早的优化是万恶之源。