存储多个真假值列表的最佳方法

时间:2016-03-15 13:41:27

标签: c# performance storage bitarray

这只是为了解决一个好奇心 - 假设,在我的C#项目中,我有一个包含数百万个字符串的列表,每个字符串都在以下几行:

"123Hi1234Howdy"
"Hi1Howdy23"
....

我需要知道的是,对于字符串中的每个字符,如果是数字还是字母。

所以,我认为最简单的存储方式是0和1或者True / False。因此,在上面的示例中,假设我可以分配IsLetter = 1IsDigit = 0,我可以将每一行转换为:

"123Hi1234Howdy"  >> 00011000011111
"Hi1Howdy23"      >> 1101111100
....

在我看来是存储我正在寻找的数据的最有效方式(但如果我错了就请你纠正我 - 我还是差不多一个新手编程)。

因此,编写循环遍历一行的代码并检查每个字符是否为数字或字母并将其转换为true / false或1/0是很容易的。我的问题是存储每条线路输出的最佳方法是什么?

我应该将每一行的输出存储为位数组吗?它可以存储为其他类型(可能比方说,整数)然后可以转换回一系列位?它应该存储为布尔数组吗? 有关存储此方法的最佳方法的任何其他想法?当这一切都说完了,我需要有一个我可以知道的列表,例如:

myList[0] = 00011000011111
myList[1] = 1101111100

然后,myList[0] <> myList[1]

1 个答案:

答案 0 :(得分:2)

您可以为每个单词使用BitArray,如果它们是数字,则将位设置为true或false。看到这个可能的解决方案:

void Main()
{
    string[] words = 
    {
        "123Hi1234Howdy", 
        "Hi1Howdy23"
    };

    //Create an array of BitArray
    var bArrays = words.Select(w => new BitArray(w.Select(c => char.IsDigit(c)).ToArray()));

    //You can also create string too
    var strings = words.Select(w => new string(w.Select(c => char.IsDigit(c) ? '1' : '0').ToArray())).ToArray();


}

这不一定是最快或最有效的。我想这取决于你打算用琴弦做什么,但至少它很简单!