这个问题是为了分享我在 StackOverflow 上学到的一个非常简单的技巧,它帮助我清理了代码中的数千个案例。
注意:这不是翻译,它只是一种我认为必要且有趣的知识的传播,最初是由我为 SO 用西班牙语创建的。
我们都通过插入分隔符手动组装了一个文本字符串,例如:
用逗号分隔的元素(汽车)的特征
,
ABS, ESP, EE, CC
带有换行符的可打印列表
\n
producto1 2,23\n producto2 3,23\n producto33 5,31\n
我们遇到了以下问题之一:
在每次迭代中插入一个比较:
JAVA
// bucle que inserta valor v en variable x if ("".equals(x)) x = v; else x = "," + v;
JAVA脚本
// bucle que inserta valor v en variable x if (x == "") x = v; else x = "," + v;
如果我们不插入该比较进行优化,我们仍然必须稍后再做以避免
最后一个空元素:
1,1,1,1,1, // ↑ aquí!
第一个空元素
,1,1,1,1,1 //↑ aquí!
问题
是否有一种模式可以避免这种常见且烦人的情况并符合以下特征?
- 横向(可用于任何语言)。
- 最优(避免昂贵的函数/方法、比较或额外的迭代)
- 可读
确实有一个非常简单有效的技巧,可以让以这种方式创建的链完美组装,最大限度地优化代码:
SEPARADOR
在开始时创建一个空变量,并在每次迭代结束时分配它:JAVA不使用技术
JAVA
JAVASCRIPT/JQUERY 不使用该技术
JAVASCRIPT/JQUERY
任何想要使用它的人都可以使用它。
这是另一种看待它的方式。
在您使用项目并添加它们的情况下,理想的是使用数组。
从那里:
array.push()
向数组中添加一个元素array.join()
用分隔符连接所有元素代码
没有适用于所有语言的最佳方法。即使在同一种语言中,最佳方法也可能因要连接的数据所在的数据结构而异。
对于 99% 的程序,让代码可读比优化更重要。先使其可读,然后仅在您认为有必要时才进行优化。
如果该语言具有执行此操作的功能,请使用它。它是最易读的,通常也是最优化的。例如,
Array.join
如果数据在数组中,则在 javascript 中使用。如果没有,只需让它可读,现在不要担心优化它。循环中的A
if
是可读的,最初为空的变量在循环中更新,正如 Jordi Castilla 在他的回答中提出的那样。喜欢一种或另一种方法取决于每个程序员。如果在实现它之后你发现你需要提高性能,如果遍历数据的方式允许的话,一个可能的选择是让第一次迭代退出循环。例如:
问题是这显然不太可读,并且并非所有循环数据的方式都允许这样做。
其他答案与空字符串进行比较。我不明白这是否是问题定义的一部分。如果不是,以下是我的解决方案。
我通常使用一个变量
boolean
。就像是:圈数太多。最便宜的是在末尾修剪逗号。
就是这样,数据量越大,任何 1 对 1 的验证都变得过于昂贵,而正是在这种情况下,它需要是最优的。
删除结尾的逗号。每行一次操作。结束
现在,这是一些 java 和 js 演示向您展示的最小问题,效率低下是规则……您可以使用 C# 或 C、C++ 做更多优化的事情……但是,嘿,您要求的是不可知的东西。你有它。
在 JAVA 8 中,我们可以这样做:
结果将是:你好,大卫
请注意,结果不包括 David 之后的任何 ', '。