J'ai besoin de trier les valeurs de telle sorte que la liste toReturn doit contenir les éléments suivants:Récursion - qu'est-ce que je fais mal?
Test(1100, 1130)
Test(1134, 1200)
Test(1210, 1310)
Test(1100, 1140)
Test(1145, 1210)
Test(1220, 1320)
Je reçois:
Test(1100, 1130)
Test(1134, 1200)
Test(1210, 1310)
Test(1100, 1140)
Test(1145, 1210)
Test(1134, 1200)
Test(1220, 1320)
En fait, en boucle à travers les trois listes et vérifier si le Début de la seconde est> Fin de la première.
J'ai essayé différentes manières de résoudre ceci et ceci de la façon la plus proche que j'ai pu obtenir, mais je n'obtiens toujours pas les résultats comme je l'espère. Est-ce que quelqu'un peut s'il vous plaît aviser ce que je pourrais faire mal?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication22
{
class Program
{
static List<Test> toReturn = new List<Test>();
static void Main(string[] args)
{
List<Test> l1 = new List<Test>();
l1.Add(new Test(1100, 1130));
l1.Add(new Test(1100, 1140));
l1.Add(new Test(1110, 1150));
List<Test> l2 = new List<Test>();
l2.Add(new Test(1134, 1200));
l2.Add(new Test(1145, 1210));
List<Test> l3 = new List<Test>();
l3.Add(new Test(1210, 1310));
l3.Add(new Test(1220, 1320));
List<List<Test>> container = new List<List<Test>>();
container.Add(l1);
container.Add(l2);
container.Add(l3);
sort(container, 0, 0);
}
private static void sort(List<List<Test>> temp, int position, int time)
{
if (position + 1 == temp.Count)
{
return;
}
List<Test> tt = temp[position];
if (position + 1 < temp.Count)
{
List<Test> tt1 = temp[position + 1];
for (int i = 0; i < tt.Count; i++)
{
int t1 = tt[i].End;
for (int j = 0; j < tt1.Count; j++)
{
int t2 = tt1[j].Start;
if (t2 > t1 && t2 > time)
{
//if (toReturn.Count == 0)
//{
if (toReturn.Count == 0)
{
toReturn.Add(tt[i]);
}
else
{
if (toReturn[toReturn.Count - 1].End != tt[i].End && toReturn[toReturn.Count - 1].Start != tt[i].Start)
{
toReturn.Add(tt[i]);
}
}
if (toReturn[toReturn.Count - 1].End != tt1[j].End && toReturn[toReturn.Count - 1].Start != tt1[j].Start)
{
toReturn.Add(tt1[j]);
}
sort(temp, position + 1, tt1[j].End);
break;
}
}
if (position > 0)
{
return;
}
}
}
String val = "";
//return toReturn;
}
}
class Test
{
int start;
public Test(int val1, int val2)
{
Start = val1;
End = val2;
}
public int Start
{
get { return start; }
set { start = value; }
}
int end;
public int End
{
get { return end; }
set { end = value; }
}
}
}
OrderBy avec comparateur personnalisé devrait être beaucoup plus petit et plus sûr ... –
Quels sont les résultats que vous obtenez à la place? – bcr
A édité le post pour montrer ce que je reçois. – user2260040