请教大神一个算法问题,把数字字符串11 13 15 17 13 14 15"分组,每组数字都不同,得到结果是11 13 15 17,13 14 15两个数组
string str="11 13 15 17 13 14 15"; string []arr=str.Split(" "); //以空格来分割字符串,这样就把11 13 15 17 13 14 15 放进数组了
string []arr1=new string[4]; arr1[0]=arr[0]; arr1[1]=arr[1]; arr1[2]=arr[2]; arr1[3]=arr[3]; string []arr2=new string[3]; arr2[0]=arr[4];arr2[1]=arr[5];arr2[2]=arr[6];
还有一种就是先截取字符串,获得11 13 15 17 ,13 14 15两个字符串,然后分割下就成两个数组了
string numstr="11 13 15 17 13 14 15";
string[] arrnum1=new string[4];
string[] arrnum2=new string[3];
for (int i=0 ;i<4;i++)
{
arrnum1[i]=numstr.Split(' ')[i];
}
for (int i = 0; i < 3; i++)
{
arrnum1[i] = numstr.Split(' ')[i+4];
}
private static string TestStr = "11 13 15 16 17 13 14 15";
private static int[] StrArrToIntArr(string strArr)
{
string[] arr = TestStr.Split(' ');
int length = arr.Length;
int[] intarr = new int[length];
for (var i = 0; i < arr.Length; i++)
{
intarr[i] = int.Parse(arr[i]);
}
return intarr;
}
private static int[][] StrtoDiffIntArr(string arrStr)
{
int[] arrInt = StrArrToIntArr(arrStr);
int len1 = 1;
List<int> lst = arrInt.ToList();
//循环计算 重复最多的数字的个数
for (var i = 0; i < arrInt.Length; i++)
{
int j = lst.Select(x => x == arrInt[i]).Count(y => y);
if (j > len1)
len1 = j;
}
List<List<int>> resultLst = new List<List<int>>();
for (int i = 0; i < len1; i++)
{
resultLst.Add(new List<int>());
}
for (var i = 0; i < arrInt.Length; i++)
{
SetValueToList(resultLst, arrInt[i]);
}
int[][] result = new int[resultLst.Count][];
for (var i = 0; i < resultLst.Count; i++)
{
result[i] = resultLst[i].ToArray();
}
return result;
}
private static void SetValueToList(List<List<int>> dicList, int value)
{
for (var i = 0; i < dicList.Count; i++)
{
if (!dicList[i].Contains(value))
{
dicList[i].Add(value);
return;
}
}
}
会得到两个数组 11 13 15 17 14,13 15.
result 可以有多个数组,看你最多重复的数字有几个。
如果数据是“11 11 11 11 11”,则结果是5个数组,每一个都是11
var result = StrtoDiffIntArr(TestStr);