Конвертировать char Array / string в bool Array - PullRequest
2 голосов
/ 29 июля 2010

У нас есть это поле в нашей базе данных, указывающее флаг true / false для каждого дня недели, который выглядит так: '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()))
};

И я нахожу этот способ слишком неуклюжим из-за множества преобразований.

Каков был бы идеальный / самый чистый способ преобразования этой строки фиксированной длины в массив bool ??

Я знаю, что вы могли бы написать это в цикле forно количество дней в неделе никогда не изменится, и поэтому я думаю, что это более эффективный путь.

Ответы [ 2 ]

10 голосов
/ 29 июля 2010

Немного LINQ может сделать это довольно тривиальной задачей:

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

Обратите внимание, что string уже реализует IEnumerable<char>, поэтому вы можете напрямую использовать методы LINQ для него.

2 голосов
/ 29 июля 2010

В .NET 2

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