从位数组获取正位索引

时间:2011-04-13 15:15:50

标签: asp.net arrays

说我有以下BitArray combinedResults = searchBitArray.And(genreBitArray);

其中包含正位,即100100110000

如何获得所有积极的索引?

1 个答案:

答案 0 :(得分:0)

这是第一个,明显是贫民窟,破解它:

BitArray ba = new BitArray(new bool[] {true,false,false,true,false,false,true,true,false,false,false,false});
List<int> pos = new List<int>();
for (int i = 0; i < ba.Length; i++)
{
    if (ba[i])
        pos.Add(i);
}

这会给你一个包含0,3,6,7的列表。你可以从ba.Length - 1开始,如果你需要从右到左阅读,则减少到零。

编辑:包含在扩展方法中,只是因为:

void Main()
{
    BitArray ba = new BitArray(new bool[] {true,false,false,true,false,false,true,true,false,false,false,false});

    List<int> positives = ba.GetBitPositions(true);
    List<int> negatives = ba.GetBitPositions(false);
}

public static class BitArrayExtensions
{
    public static List<int> GetBitPositions(this BitArray ba, bool MatchCondition)
    {
        List<int> pos = new List<int>();

        for (int i = 0; i < ba.Length; i++)
        {
            if (ba[i] == MatchCondition)
                pos.Add(i);
        }

        return pos;
    }
}