从bytearray中删除特定的索引范围,然后重新组合c#

时间:2015-12-16 16:01:03

标签: c# arrays arraylist bytearray copyonwritearraylist

我有一个要求,我在bytearray中有大量数据。我想选择39998数据并跳过39999,40000.40001,40002索引,然后再次选择此39998数据并跳过39999,40000.40001,40002。

所以我的要求就是这样  我需要大小为39998 * 12 = 479976

的总字节数组

我试过这个解决方案

for (int i = 1; i < 13; i++)
{
    list.RemoveAt(39999 * i);
    list.RemoveAt((39999 * i) + 1);
    list.RemoveAt((39999 * i) + 2);
    list.RemoveAt((39999 * i) + 3);
}

但它改变了名单。

我需要选择1到39998跳过4字节的数据,然后选择39998并跳过4字节,依此类推12次。然后重新组合bytearray。实际上如果我们正在使用列表它转移索引所以在第二次它发生问题(删除其他索引)。所以,如果您有其他建议,请告诉我

3 个答案:

答案 0 :(得分:0)

这有用吗?

app.onFirebaseLogin = function(event) {
  this.ref = new Firebase(this.firebaseURL + '/user/' + 
                                                  event.detail.user.uid);
  var self = this;
  this.ref.on('value', function(snapshot) {
    self.updateArticole(snapshot);
  });
};

答案 1 :(得分:0)

如果我正确理解这个问题就会有这样的工作吗?

int iterations = 12;
var newList = new List<byte>();

for(int i = 0; i < iterations; i++)
{
    newList.AddRange(list.Skip(40002 * i).Take(39998));
}

var result = newList.ToArray();

答案 2 :(得分:0)

如下:

int take = 39998;
int skip = 4;

int iterationBatch = take + skip;
int finalAmount = take * 12;

var yourNewArray = yourOldArray
    .GroupBatch(iterationBatch)
    .SelectMany(x => x.Take(take))
    .Take(finalAmount)
    .ToArray();

使用类似的扩展方法:

public static IEnumerable<IEnumerable<T>> GroupBatch<T>(this IEnumerable<T> enumerable, int batchSize)
{
    int count = enumerable.Count();
    for (int taken = 0; taken < count ; taken += batchSize)
    {
        yield return enumerable.Skip(taken).Take(batchSize);
    }
}

我虽然没有彻底测试过,但你对它有了一般的了解......