for(int i = 0; i < org.Length; i++)
{
if (i < org.Length)
{
orgResult += $“{org[i]},“;
doubledResult += $“{doubled[i]},“;
}
else
{
orgResult += $“{org[i]}“;
doubledResult += $“{doubled[i]}“;
}
}
Console.WriteLine($“rnYour original array was [{orgResult}] and now it is doubled it is [{doubledResult}]“);
在提供的代码中,我试图在显示到控制台窗口时在数组中的每个元素后面放置一个逗号。但是,当我到达数组中的最后一个数字时,我不希望在它后面加上逗号。
我以为 else 语句会处理它,但它仍然在最后一个数字后面加上一个逗号。有什么建议吗?
i
总是小于org.Length
,这就是你的循环条件。要识别何时是最后一次迭代,您需要检查if i < org.Length - 1
:
for(int i = 0; i < org.Length; i++)
{
if (i < org.Length - 1)
解决此问题的更好方法是使用string.Join()
:
orgResult = string.Join(",", org);
doubledResult = string.Join(",", doubled);
但如果这是学校练习,您可能不被允许使用这些方法。
看起来这就是你想要的:
var strings = new string[] { "a", "b", "c" };
var combinedString = string.Join(",", strings );
结果:组合字符串 ="a,b,c">
正如我在评论中提到的,要修复您的代码,您需要更改:
if (i < org.Length)
到:
if (i < org.Length - 1)
这是因为您的循环已经强制要求i
小于org.Length
,因此您的else
案例永远不会触发。
然而,为了获得更有效的解决方案,你应该使用string.Join
,如René的回答所述。
如果org
很大,则当前代码中的string
s存在问题:
int[] org = new int[1000000];
因为每个orgResult += $“{org[i]},“;
都意味着创建一个不可变string
的新实例并将数据复制到其中(1000000
创建乘以平均长度500000
得出5e11
基本操作)。 如果要循环实现,请使用StringBuilder
:
StringBuilder sbOrg = new StringBuilder();
StringBuilder sbDub = new StringBuilder();
foreach (var item in org) {
if (sbOrg.Length > 0)
sbOrg.Append(",");
sbOrg.Append(item);
}
foreach (var item in doubled) {
if (sbDub.Length > 0)
sbDub.Append(",");
sbDub.Append(item);
}
orgResult = sbOrg.ToString();
doubledResult = sbDub.ToString();
有很多方法可以实现这一点, 例如,您可以像这样更改您的条件:
orgResult += $“{org[i]}“;
doubledResult += $“{doubled[i]}“;
if(i != org.Length - 1)
{
orgResult += ",";
doubledResult += ",";
}
虽然这不是最佳实践。