我有一个类似于:
的数组status[0] = true
status[1] = true
status[2] = false
status[3] = true
实际上它更大但仍然小于20.我需要将其转换为“ABD”。其中每个true表示字母表中的有序字母。谁能想到一个简单有效的方法来做到这一点?
答案 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