我有一個數組,看起來像:轉換的布爾數組轉換成字符串使用C#
status[0] = true
status[1] = true
status[2] = false
status[3] = true
在現實中它更大,但仍低於20,我需要將其轉換成「ABD」。其中每個真實代表字母表中的有序字母。任何人都可以想到一個簡單而有效的方法來做到這一點?
我有一個數組,看起來像:轉換的布爾數組轉換成字符串使用C#
status[0] = true
status[1] = true
status[2] = false
status[3] = true
在現實中它更大,但仍低於20,我需要將其轉換成「ABD」。其中每個真實代表字母表中的有序字母。任何人都可以想到一個簡單而有效的方法來做到這一點?
string input = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string result = new String(input.ToCharArray()
.Take(status.Length)
.Where((c, i) => status[i]).ToArray());
如果'status'的成員少於26個,這將不起作用。 – svick 2011-05-04 23:37:05
我很抱歉,但我不得不指出我看來有多醜。 :-)我希望看到一些比較表現。 – 2011-05-04 23:37:59
@svick添加了(長度)。 – 2011-05-04 23:40:39
我的餐巾紙說,這可能工作...
StringBuilder sb = new StringBuilder();
for(int i = 0; i < status.Length; i++)
{
if(status[i])
{
sb.Append((char)('A' + i));
}
}
string result = sb.ToString();
String[] alphabet = new String[] {"A", "B", ... "Z"};
String result = "";
for (int i = 0; i < status.Length; i++)
{
if (status[i] == true) result += alphabet[i];
}
基本上,你可以創建一個英文字母的排列和你status
陣列的true
值匹配到相應的字母。
由於字母是連續的,因此不需要'Alphabet'數組。 – 2011-05-04 23:33:49
'if(foo == true)'!!格蘭芬多5分! (不需要'== true') – 2011-05-04 23:34:13
@Jonathan:非常真實。爲了簡單起見,我創建了字母數組。如果這些字母需要更改,則很容易修改數組。 – 2011-05-04 23:35:07
您可以使用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));
}
我認爲這是迄今爲止最好的答案+1 – 2011-05-04 23:52:03
+1由於本答案顯示一些LINQ方法,使用Zip怎麼樣(他們最終在.NET 4中添加了這個?)以及在'A'..'Z'的輸入和枚舉上的位置? – 2011-05-05 00:04:20
像這樣創建一個類:
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
我怕你你需要充實一點你的問題。什麼值(真或假)成爲什麼字母? – 2011-05-04 23:30:12
@Jonathan我會假設0 ='A',1 ='B',......但這對Beth來說很好澄清 – 2011-05-04 23:32:42
很確定她意味着數組的每個索引都與相同的索引相關聯字母。在她的樣本中,'真實,真實,錯誤,真實'=「ABD」。 – Jon 2011-05-04 23:34:33