private static Tuple <List <Smi>, List <Smi> > DevideGroup(List <SmiPadding> smis, int lineCount) { List <Smi> smiUpper = new List <Smi>(); List <Smi> smiLower = new List <Smi>(); // 모든 줄 내용이 바뀐 경우 그룹 잘라서 처리 SmiPadding bfr = smis[0]; List <SmiPadding> splitted = new List <SmiPadding>() { bfr }; for (int i = 1; i < smis.Count; i++) { SmiPadding smi = smis[i]; bool isSplit = true; for (int j = 0; j < lineCount; j++) { if (smi.lines[j] != null && !smi.lines[j].Equals(bfr.lines[j])) { isSplit = false; break; } } if (isSplit) { Tuple <List <Smi>, List <Smi> > devided = DevideLine(splitted, lineCount); smiUpper.AddRange(devided.Item1); smiLower.AddRange(devided.Item2); splitted = new List <SmiPadding> { smi }; } else { splitted.Add(smi); } bfr = smi; } { Tuple <List <Smi>, List <Smi> > devided = DevideLine(splitted, lineCount); smiUpper.AddRange(devided.Item1); smiLower.AddRange(devided.Item2); } return(new Tuple <List <Smi>, List <Smi> >(smiUpper, smiLower)); }
public static Tuple <List <Smi>, List <Smi> > Devide(List <Smi> input) { List <SmiPadding> smis = new List <SmiPadding>(); foreach (Smi smi in input) { smis.Add(new SmiPadding(smi)); } List <Smi> smiUpper = new List <Smi>(); List <Smi> smiLower = new List <Smi>(); // 줄 수가 같은 것 단위로 나눠서 처리 SmiPadding bfr = smis[0]; List <SmiPadding> splitted = new List <SmiPadding>() { bfr }; for (int i = 1; i < smis.Count; i++) { SmiPadding smi = smis[i]; if (smi.lines.Length == bfr.lines.Length) { splitted.Add(smi); } else { Tuple <List <Smi>, List <Smi> > devided = DevideGroup(splitted, bfr.lines.Length); smiUpper.AddRange(devided.Item1); smiLower.AddRange(devided.Item2); splitted = new List <SmiPadding> { smi }; } bfr = smi; } { Tuple <List <Smi>, List <Smi> > devided = DevideGroup(splitted, bfr.lines.Length); smiUpper.AddRange(devided.Item1); smiLower.AddRange(devided.Item2); } return(new Tuple <List <Smi>, List <Smi> >(smiUpper, smiLower)); }