如何将0、1构成的字符串转换为布尔数组(C#实现方案咨询)
在C#中简洁实现0/1字符串转二维布尔数组
嘿,这个需求在C#里完全不用手动逐个遍历字符!借助LINQ(类似Java的Streams API)就能写出非常简洁的代码,下面给你两种常见场景的实现方式:
第一步:将输入字符串转为一维布尔数组
你的输入是空格分隔的0、1字符串,我们可以先处理成一维布尔数组:
方式1:按空格分割后转换
如果保留空格作为分隔符,直接分割后转换:
var input = "1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 1"; // 分割为单个"1"/"0"字符串,再转为bool数组(1→true,0→false) bool[] oneDBoolArray = input.Split(' ') .Select(s => s == "1") .ToArray();
方式2:移除空格后按字符转换
如果先移除所有空格得到连续的0/1字符串,也可以直接遍历字符转换:
var input = "1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 1"; var cleanInput = input.Replace(" ", ""); // 遍历每个字符,判断是否为'1'来生成bool数组 bool[] oneDBoolArray = cleanInput.Select(c => c == '1').ToArray();
第二步:将一维数组转为二维布尔数组
假设你需要按固定行数/列数拆分(比如示例中25个元素,拆成5行5列),可以用以下方法:
.NET 6+ 版本(推荐):使用Chunk方法
.NET 6及以上提供了Chunk方法,可以直接将数组按指定长度拆分:
int rowSize = 5; // 每行的元素数量 bool[][] twoDBoolArray = oneDBoolArray.Chunk(rowSize).Select(chunk => chunk.ToArray()).ToArray();
兼容旧版本.NET:用LINQ分组实现
如果是.NET Framework或低于6的.NET版本,可以通过LINQ分组来模拟拆分:
int rowSize = 5; bool[][] twoDBoolArray = oneDBoolArray .Select((value, index) => new { Value = value, Index = index }) .GroupBy(item => item.Index / rowSize) // 按行索引分组 .Select(group => group.Select(item => item.Value).ToArray()) .ToArray();
这样整个流程就完成了,完全不需要手动写循环逐个判断,和Java的Streams一样简洁高效!
内容的提问来源于stack exchange,提问作者PixelMaster
相关产品推荐
相关产品推荐

