我想模仿通用陣列的String.Split功能。如何拆分通用陣列
我想出了這個方法,似乎適用於雙打。
public static double[][] Split(this double[] vals, double t)
{
List<double[]> ret = new List<double[]>();
int last = -1;
for (int i = 0; i <= vals.Length; i++)
{
if (i != vals.Length && vals[i] != t)
continue;
int len = i - last - 1;
if (len <= 0)
{
last = i;
continue;
}
double[] arr = new double[len];
Array.Copy(vals, last + 1, arr, 0, len);
last = i;
ret.Add(arr);
}
return ret.ToArray();
}
而這其中仿製藥......
public static T[][] Split<T>(this T[] vals, T t) where T : EqualityComparer<T>
{
List<T[]> ret = new List<T[]>();
int last = -1;
for (int i = 0; i <= vals.Length; i++)
{
if (i != vals.Length && vals[i] != t)
continue;
int len = i - last - 1;
if (len <= 0)
{
last = i;
continue;
}
T[] arr = new T[len];
Array.Copy(vals, last + 1, arr, 0, len);
last = i;
ret.Add(arr);
}
return ret.ToArray();
}
所以,我有三個問題:
- 是否有這樣做的更好/通用-C#的方式?
- 如何獲取模板方法的工作? (我得到
vals[i] != t
錯誤) - 現在固定 - 我怎樣才能做得更好(它現在是一種醜陋,IMO)
實例應用:
double[] vals = new double[] { 0, 1, 2, 0, 0, 2, 3, 0, 4, 5, 6 };
double[][] res = vals.Split(0);
// res[0] = [1, 2]
// res[1] = [2, 3]
// res[2] = [4, 5, 6]
問題#1和#3是不是真的適合這裏。他們太主題了。在codereview上它可能沒問題,但它需要一些改進。它也需要先工作。 – Servy 2013-04-05 19:15:13