使用c#将布尔数组转换为字符串

时间:2011-05-04 23:28:56

标签: c#

我有一个类似于:

的数组
status[0] = true
status[1] = true
status[2] = false
status[3] = true

实际上它更大但仍然小于20.我需要将其转换为“ABD”。其中每个true表示字母表中的有序字母。谁能想到一个简单有效的方法来做到这一点?

5 个答案:

答案 0 :(得分:5)

我的餐巾纸说这可能有用......

StringBuilder sb = new StringBuilder();
for(int i = 0; i < status.Length; i++)
{
   if(status[i])
   {
       sb.Append((char)('A' + i));
   }
}

string result = sb.ToString();

答案 1 :(得分:3)

string input = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

string result = new String(input.ToCharArray()
                      .Take(status.Length)
                      .Where((c, i) => status[i]).ToArray());

答案 2 :(得分:3)

您可以使用Linq:

var status = new bool[] { true, true, false, true };

// alternative 1
var statusString = string.Concat(
    status.Select((val, index) => val ? (char?)('A' + index) : null)
          .Where(x => x != null));

// alternative 2
var statusString2 = string.Concat( 
    status.Select((val, index) => val ? (object)(char)('A' + index) : ""));

// alternative 3 (same as one, no boxing)
var statusString3 = string.Concat(
    status.Select((val, index) => val ? (char)('A' + index) : ' ')
          .Where(x => x != ' '));


// alternative 4 (no Linq, probably faster)
var statusString4 = new StringBuilder(status.Length);
for (int i = 0; i < status.Length; i++)
{
    if (status[i])
        statusString4.Append((char)('A' + i));
}

答案 3 :(得分:2)

String[] alphabet = new String[]  {"A", "B", ... "Z"};
String result = "";

for (int i = 0; i < status.Length; i++)
{
    if (status[i] == true) result += alphabet[i];
}

基本上,您可以创建字母表字母数组,并将true数组的status值与相应的字母相匹配。

答案 4 :(得分:0)

创建一个这样的类:

class Bool2CharArrayConverter
{

    public static string ConvertArray(bool[] Input)
    {
        int asc = 65;
        StringBuilder response = StringBuilder();
        foreach (bool val in Input)
        {
            if (val)
            {
                response.Append( Convert.ToChar(asc));
            }
            asc++;
        }
        return response.ToString();
    }
}

可以像这样调用:

     bool[] status = new bool[]{true,true,false,true};
     string output = Bool2CharArrayConverter.ConvertArray(status);
     Console.WriteLine(output); //output = ABD