public Row merge(Row master, Row existing) {Iterator<Character> i = master.cells.keySet().iterator();Row n = new Row();for (; i.hasNext();) {Character ch = i.next();Cell a = master.cells.get(ch);Cell b = existing.cells.get(ch);Cell s = (b == null) ? new Cell(a) : merge(a, b);if (s == null) {return null;}n.cells.put(ch, s);}i = existing.cells.keySet().iterator();for (; i.hasNext();) {Character ch = i.next();if (master.at(ch) != null) {continue;}n.cells.put(ch, existing.at(ch));}return n;}

public Row merge ( Row master , Row existing ) { Iterator < Character > i = master . cells . keySet ( ) . iterator ( ) ; Row n = new Row ( ) ; for ( ; i . hasNext ( ) ; ) { Character ch = i . next ( ) ; Cell a = master . cells . get ( ch ) ; Cell b = existing . cells . get ( ch ) ; Cell s = ( b == null ) ? new Cell ( a ) : merge ( a , b ) ; if ( s == null ) { return null ; } n . cells . put ( ch , s ) ; } i = existing . cells . keySet ( ) . iterator ( ) ; for ( ; i . hasNext ( ) ; ) { Character ch = i . next ( ) ; if ( master . at ( ch ) != null ) { continue ; } n . cells . put ( ch , existing . at ( ch ) ) ; } return n ; }
public Row Merge(Row master, Row existing){Row n = new Row();foreach (char ch in master.cells.Keys){master.cells.TryGetValue(ch, out Cell a);Cell s = !existing.cells.TryGetValue(ch, out Cell b) || (b == null) ? new Cell(a) : Merge(a, b);if (s == null){return null;}n.cells[ch] = s;}foreach (char ch in existing.cells.Keys){if (master.At(ch) != null){continue;}n.cells[ch] = existing.At(ch);}return n;}
