如何将布尔数组所有值设为TRUE?有无无需循环的优雅实现方案?
把布尔数组全设为True/False的优雅实现
嘿,这个问题我太懂了!要把布尔数组里的所有值都设为true(或false),还不想写烦人的for循环,确实有不少优雅又高效的办法,我按几种常用编程语言给你拆解下:
Python
如果是普通的列表数组,最简单的方式是直接生成新数组:
# 假设原数组是arr arr = [True] * len(arr)
要是用NumPy处理更大型的数组,用full方法性能更优:
import numpy as np arr = np.full(len(arr), True, dtype=bool)
如果想直接修改原列表而不是生成新的,可以用列表推导式(写法简洁,底层优化过):
arr = [True for _ in arr]
Java
Java标准库直接提供了Arrays.fill方法,专门用来批量填充数组,一行搞定修改原数组:
import java.util.Arrays; // 假设原布尔数组是boolean[] arr Arrays.fill(arr, true);
这个方法底层做了针对性优化,比手动写for循环效率更高,代码也更干净。
JavaScript
ES6及以上版本支持Array.fill方法,直接修改原数组:
// 原数组arr arr.fill(true);
如果想生成一个新的全true布尔数组,也可以用Array.from:
const newArr = Array.from({ length: arr.length }, () => true);
C#
在.NET Core 3.0及以上版本,直接用Array.Fill修改原数组:
// 原布尔数组bool[] arr Array.Fill(arr, true);
要是用的是老版本.NET,可以用Enumerable.Repeat生成新数组:
using System.Linq; bool[] newArr = Enumerable.Repeat(true, arr.Length).ToArray();
补充说明
你之前用“重新初始化数组为全TRUE”的方式其实已经很优雅了!如果你的场景允许生成新数组而不是修改原数组,这种方式完全没问题。而上面提到的fill类方法更适合需要修改原数组的场景,它们底层大多是用内存批量操作实现的,性能比手动循环好很多,代码可读性也更强。
内容的提问来源于stack exchange,提问作者Teodor Ciuraru
相关产品推荐
相关产品推荐

