你是怎么做到的?给定一个字节数组:
byte[] foo = new byte[4096];
我如何得到数组的前x字节作为一个单独的数组?(具体来说,我需要它作为一个IEnumerable<byte>)
这是用于使用Sockets的。我认为最简单的方法是数组切片,类似于perl语法:
@bar = @foo[0..40];
将前41个元素返回到@bar数组中。c#中是否有我遗漏的东西,或者有其他我应该做的事情?
LINQ对我来说是一个选择。NET 3.5),如果有帮助的话。
你是怎么做到的?给定一个字节数组:
byte[] foo = new byte[4096];
我如何得到数组的前x字节作为一个单独的数组?(具体来说,我需要它作为一个IEnumerable<byte>)
这是用于使用Sockets的。我认为最简单的方法是数组切片,类似于perl语法:
@bar = @foo[0..40];
将前41个元素返回到@bar数组中。c#中是否有我遗漏的东西,或者有其他我应该做的事情?
LINQ对我来说是一个选择。NET 3.5),如果有帮助的话。
当前回答
我在这里没有看到的另一种可能性是:Buffer.BlockCopy()比array . copy()稍微快一些,而且它还有一个额外的好处,就是能够实时地将原语数组(比如short[])转换为字节数组,这在需要通过socket传输数字数组时非常方便。
其他回答
如果你不想添加LINQ或其他扩展,只需:
float[] subArray = new List<float>(myArray).GetRange(0, 8).ToArray();
我不认为c#支持范围语义。你也可以写一个扩展方法,比如:
public static IEnumerator<Byte> Range(this byte[] array, int start, int end);
但就像其他人说的,如果你不需要设置一个开始索引,那么Take就是你所需要的。
您可以使用Take扩展方法
var array = new byte[] {1, 2, 3, 4};
var firstTwoItems = array.Take(2);
可以使用数组的CopyTo()方法。
或者使用LINQ,你可以使用Skip()和Take()…
byte[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
var subset = arr.Skip(2).Take(2);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace data_seniens
{
class Program
{
static void Main(string[] args)
{
//new list
float [] x=new float[]{11.25f,18.0f,20.0f,10.75f,9.50f, 11.25f, 18.0f, 20.0f, 10.75f, 9.50f };
//variable
float eat_sleep_area=x[1]+x[3];
//print
foreach (var VARIABLE in x)
{
if (VARIABLE < x[7])
{
Console.WriteLine(VARIABLE);
}
}
//keep app run
Console.ReadLine();
}
}
}