请求修改单层深度数组扁平化代码,解决flatten([1,2])未抛异常问题
实现Crystal语言的单层数组扁平化方法
要实现仅展开一级嵌套的数组扁平化(也就是只处理直接包含的数组元素,更深层的嵌套保持原样),可以利用Crystal的flat_map方法来简洁实现,完全满足你给出的示例需求:
代码实现
def flatten_once(arr) arr.flat_map { |item| item.is_a?(Array) ? item : [item] } end
测试示例验证
我们可以用你给出的测试用例验证效果:
flatten_once([1, [2], [[3]]])→[1, 2, [3]]flatten_once([1, 2, [[3]]])→[1, 2, [3]]flatten_once([[1, [[2, 3]]]])→[1, [[2, 3]]]flatten_once([1, 2])→[1, 2]
代码解释
flat_map方法会遍历数组的每个元素,将每个元素映射为一个数组,最后把所有这些数组拼接成一个新数组。- 对于每个元素:
- 如果它本身是数组,直接返回该数组(这样
flat_map会把它的元素直接拼接到结果里,实现一级展开); - 如果不是数组,就把它包装成一个单元素数组,确保它被直接加入结果中,不会被展开。
- 如果它本身是数组,直接返回该数组(这样
这个实现既简洁又高效,同时完全符合你需要的单层扁平化逻辑,而且处理[1,2]这类没有嵌套的数组时也能正常返回原数组,不会抛出异常。
内容的提问来源于stack exchange,提问作者user6083685
相关产品推荐
相关产品推荐

