【发布时间】:2021-12-15 04:20:15
【问题描述】:
所以我正在解决一些不相关的编码挑战,我需要根据一个元素拆分一个 int 数组。
类似于 String.Split 的工作方式。
例如:
var arr1 = new int [] { 3, 3, 0, 2, 4, 3, 2 };
var arr2 = new int [] { 8, 8, 5, 7, 9, 8, 7, 4, 8 };
var results1 = Split(arr1, 0);
foreach (var arr in results1)
Console.WriteLine(string.Join(",", arr));
var results2 = Split(arr2, 8);
foreach (var arr in results2)
Console.WriteLine(string.Join(",", arr));
这里的输出是:
3,3
2,4,3,2
5,7,9
7,4
我很惊讶,我找不到任何答案,String.Split 不断出现,但没有整数!
所以我写了这个:
public int[][] Split(int[] arr, int element)
{
List<int[]> arrays = new List<int[]>();
int skip = 0;
int take = 0;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == element && take != 0)
{
arrays.Add(arr.Skip(skip).Take(take).ToArray());
skip = i + 1;
take = 0;
continue;
}
if (arr[i] != element)
take++;
if (take == 0)
skip = i + 1;
if (arr.Length - 1 == i && take != 0)
arrays.Add(arr.Skip(skip).Take(take).ToArray());
}
return arrays.ToArray();
}
这行得通(我认为),但它很乱,我不喜欢它
还有其他解决方案吗?
【问题讨论】: