Bla*_*ast 23 c# arrays split multidimensional-array
我有一个字节列表,我想将此列表拆分为较小的部分.
var array = new List<byte> {10, 20, 30, 40, 50, 60};
Run Code Online (Sandbox Code Playgroud)
此列表有6个单元格.例如,我想将它分成3个部分,每个部分包含2个字节.
我曾尝试编写一些for循环并使用2D数组来实现我的目的,但我不知道这是一种正确的方法.
byte[,] array2D = new byte[window, lst.Count / window];
var current = 0;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
array2D[i, j] = lst[current++];
}
}
Run Code Online (Sandbox Code Playgroud)
Zen*_*ulz 55
一种不错的方法是创建一个通用/扩展方法来拆分任何数组.这是我的:
/// <summary>
/// Splits an array into several smaller arrays.
/// </summary>
/// <typeparam name="T">The type of the array.</typeparam>
/// <param name="array">The array to split.</param>
/// <param name="size">The size of the smaller arrays.</param>
/// <returns>An array containing smaller arrays.</returns>
public static IEnumerable<IEnumerable<T>> Split<T>(this T[] array, int size)
{
for (var i = 0; i < (float)array.Length / size; i++)
{
yield return array.Skip(i * size).Take(size);
}
}
Run Code Online (Sandbox Code Playgroud)
而且,该解决方案被推迟.然后,只需调用split(size)您的阵列.
var array = new byte[] {10, 20, 30, 40, 50};
var splitArray = array.Split(2);
Run Code Online (Sandbox Code Playgroud)
根据要求,这是从数组中获取方形2D数组的通用/扩展方法:
public static T[,] ToSquare2D<T>(this T[] array, int size)
{
var buffer = new T[(int)Math.Ceiling((double)array.Length/size), size];
for (var i = 0; i < (float)array.Length / size; i++)
{
for (var j = 0; j < size; j++)
{
buffer[i, j] = array[i + j];
}
}
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
玩得开心 :)
Omr*_*ian 10
使用Linq
public List<List<byte>> SplitToSublists(List<byte> source)
{
return source
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / 100)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
只需使用它
var sublists = SplitToSublists(lst);
Run Code Online (Sandbox Code Playgroud)
这有列表列表
array.Select((s,i) => array.Skip(i * 2).Take(2)).Where(a => a.Any())
Run Code Online (Sandbox Code Playgroud)
或者这个有项目列表
array.SelectMany((s,i) => array.Skip(i * 2).Take(2)).Where(a => a.Any())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36762 次 |
| 最近记录: |