用C#实现一个数组的问题100分
给出一组int型数组如下(长度已知)
0 0 0 …… 0 2 4 5 6 8 2 …… 4 0 0 0…… 0 4 3 2 …… 3 0 0 0 ……
数组的特征是每隔若干个0后就有若干个自然数 ,现在把0看成空值,现在要实现一个功能,将这个数组里的0全部剔除,将自然数保存在另外定义的数组中,我表达能力不好,举个例子说明下吧
如下整型数组 a[10] {0 0 1 2 3 0 0 0 5 8}
我要实现的功能是处理后分成两个数组 b[3] {1 2 3} 和c[2] {5 8}
同理如果数组是 {0 0 1 2 0 0 3 4 0 0 5}这样就分成3个数组 {1 2}{3 4}{5}
原始数组长度是已知的,但是不知道里面有多少个 0,也就是空值,也有可能整个数组全是0或全不是。
我不知道说明白了没有,请大家帮忙,多谢
[解决办法]
static void Main(string[] args)
{
int[] a = new int[] { 0, 0, 1, 2, 0, 0, 3, 4, 0, 0, 5 };
List <int[]> results = new List <int[]> ();
int index = 0;
while (index < a.Length)
{
while (index < a.Length && a[index] == 0)
{
index++;
}
if (index < a.Length)
{
List <int> newarray = new List <int> ();
while (index < a.Length&&a[index] != 0)
{
newarray.Add(a[index]);
index++;
}
results.Add(newarray.ToArray());
}
}
foreach (int[] ia in results)
{
Console.Write( "{ ");
foreach (int var in ia)
{
Console.Write(var);
Console.Write( " ");
}
Console.WriteLine( "} ");
}
}
[解决办法]
你分成二维数组不好吗?
int[] test = { 0,1,2,0,0,3,0,5,1,8,7,0,0,0,0,5,9,4};
int length = test.Length;
int[][] need = new int[length][];
for (int i = 0; i < length; i++)
{
//具体去比较实现
}
[解决办法]
List <string> list = new List <string> ();
string s = "002323001230000 ";
string[] ss = s.Split( '0 ');
foreach (string s in ss)
{
if (s != null && s != string.Empty)
{
list.Add(s);
}
}
ss = list.ToArray();
return ss;
[解决办法]
// 未测试
List <List <int> > result = new List <List <int> > ();
const int separator = 0;
for (int i = 0; i < source.Length; i++) {
if (source[i] != separator) {
if (i == 0 || source[i-1] == 0) {
result.Add(new List <int> ());
}
result[result.Count - 1].Add(source[i]);
}
}
------解决方案--------------------
sorry,下面才是正确的:
List <string> list = new List <string> ();
string s = "002323001230000 ";
string[] ss = s.Split( '0 ');
foreach (string s in ss)
{
if (s != null && s != string.Empty)
{
char[] ss1 = s.ToCharArray();
list.Add(ss1);
}
}
ss = s.ToCharArray();
return ss;
[解决办法]
sorry,下面才是正确的:
List <string> list = new List <string> ();
string s = "002323001230000 ";
string[] ss = s.Split( '0 ');
foreach (string s in ss)
{
if (s != null && s != string.Empty)
{
char[] ss1 = s.ToCharArray();
list.Add(ss1);
}
}
ss = s.ToCharArray();
return ss;
[解决办法]
// try 了一把,嘿嘿测试通过
int[] source = new int[] {0, 0, 1, 2, 3, 0, 0, 0, 5, 8, 0, 11, 55, 0, 8, 9, 10, 0, 0};
List <List <int> > result = new List <List <int> > ();
const int separator = 0;
for (int i = 0; i < source.Length; i++) {
if (source[i] != separator) {
if (i == 0 || source[i-1] == 0) {
result.Add(new List <int> ());
}
result[result.Count - 1].Add(source[i]);
}
}
List <int[]> dst = new List <int[]> (result.Count);
foreach (List <int> a in result) {
dst.Add(a.ToArray());
}
// out
StringBuilder sb = new StringBuilder();
foreach (int[] a in dst) {
foreach (int n in a) {
sb.Append(n).Append( ", ");
}
sb.AppendLine();
}
HtmlPreWriter.Flush(sb);
/*
1,2,3,
5,8,
11,55,
8,9,10,
*/
[解决办法]
array ary; // 这个是你要的数组
List <int> list = new List <int> ();
foreach (int i in ary)
{
if (i> 0)
list.Add(i);
}
// 这个list里面就是要的所有元素
[解决办法]
如果要分成几个数组,就要定义两个List。
Array ary; // 原数组
List <List <int> > list = new List <List <int> > ();
List <int> t = new List <int> ();
int buff = 0;
foreach (int i in ary)
{
if (i> 0)
{
t.Add(i);
}
else if (i==0 && buff> 0)
{
list.Add(t);
t.Clear();
}
buff = i;
}
return list;
// 如果要取数据,使用list[i][j]来取
// i表示取第几个数组,j表示取这个数组的第几个元素
[解决办法]
方法不一定是最好的,但是也是个解决办法:
StringBuilder sb = new StringBuilder();
int[] ints = { 0, 1, 2, 123, 0, 0, 0, 34, 16, 0, 7 };
foreach (int i in ints)
{
sb.Append(i.ToString());
sb.Append( ', ');
}
List <int[]> list = new List <int[]> ();
string s = sb.ToString();
string[] ss = s.Split( '0 ');
foreach (string s2 in ss)
{
if (s2 != null && s2 != string.Empty)
{
string[] ss2 = s2.Split( ', ');
List <int> ints2 = new List <int> ();
foreach (string s3 in ss2)
{
if (s3 != null && s3 != string.Empty)
{
ints2.Add(Convert.ToInt32(s3));
}
}
if (ints2.Count != 0)
{
list.Add(ints2.ToArray());
}
}
}
return list.ToArray();
[解决办法]
int[] intArr = new int[100];
intArr.Initialize();
intArr[4] = 4; intArr[5] = 5; intArr[6] = 6; intArr[80] = 80; intArr[83] = 83; intArr[84] = 84; intArr[98] = 98; intArr[99] = 99;
List <List <int> > ls = new List <List <int> > ();
List <int> list = new List <int> ();
for (int i = 0; i < intArr.Length; i++)
{
if (i == intArr.Length - 1)
{
if (intArr[i] != 0)
list.Add(intArr[i]);
if(list.Count !=0)
ls.Add(list);
break;
}
if (intArr[i] != 0)
{
list.Add(intArr[i]);
}
else
{
if (list.Count != 0)
{
ls.Add(list);
list = new List <int> ();
}
continue;
}
}
Response.Write(ls.Count); =4
-----------------
测试过