将字符数组/字符串转换为布尔数组

3
我们的数据库中有一个字段,用于表示每周中每一天的真/假标志,格式如下:'1111110'。
我需要将这个值转换为布尔数组。
为此,我编写了以下代码:
char[] freqs = weekdayFrequency.ToCharArray();
bool[] weekdaysEnabled = new bool[]{
    Convert.ToBoolean(int.Parse(freqs[0].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[1].ToString())),
    Convert.ToBoolean(int.Parse(freqs[2].ToString())),
    Convert.ToBoolean(int.Parse(freqs[3].ToString())),
    Convert.ToBoolean(int.Parse(freqs[4].ToString())),
    Convert.ToBoolean(int.Parse(freqs[5].ToString())),
    Convert.ToBoolean(int.Parse(freqs[6].ToString()))
};

我发现这种方法太笨重了,因为需要进行很多转换。

将这个固定长度的字符串转换为布尔类型的数组,有什么理想/最干净的方法?

我知道你可以用for循环来写,但一周中的天数永远不会改变,因此我认为这是更高效的方法。

2个回答

11

使用一点LINQ可以使这个任务变得非常简单:

var weekdaysEnabled = weekdayFrequency.Select(chr => chr == '1').ToArray();

请注意,string 已经实现了 IEnumerable<char> 接口,因此您可以直接在其上使用 LINQ 方法。


1
测试应该是chr == '1',因为你正在比较字符。 - Darin Dimitrov
这就是我喜欢stackoverflow的原因,你提出一个问题,一分钟后就有了答案; D,但你需要将双引号改为单引号,因为我们正在处理字符,但除此之外编译工作正常:D,谢谢! - Peter
@Darin:下次如果明显是打字错误,随意编辑帖子即可。 ;) - Noldorin
@Peter:没问题,很高兴它能胜任工作。 - Noldorin

2
在 .NET 2 中,
bool[] weekdaysEnabled1 =
Array.ConvertAll<char, bool>(
    freqs,
    new Converter<char, bool>(delegate(char c) { return Convert.ToBoolean(int.Parse(freqs[0].ToString())); }));

weekdaysEnabled1是错误的:'allWeekdays'是正确的。这只是一种更简洁的语法,但我认为转换的数量是相同的:(我不知道为什么公共静态布尔值ToBoolean(char value)方法没有在框架中实现。 - Florian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接