2016-07-20 10 views
2

Ich versuche, einen Textblock in ein 2D-Array zu teilen. Ich weiß, wie man eine Zeile in ein Array von Wörtern aufteilt, und ich weiß, wie man mehrere Zeilen in ein Array von Zeilen aufteilt, aber ich möchte beides gleichzeitig tun.Text in 2d Array teilen

Zum Beispiel möchte ich das:

Tim schön ist
Jim Mittelwert

werden würde ((Tim, ist schön), (Jim , ist, bedeuten))

S o weit, ich in der Lage gewesen

Str1.Split(new String() {Environment.NewLine}, StringSplitOptions.None) 

zu verwenden, um das Beispiel String in zu machen:

(Tim ist schön, Jim ist mittler)

Und ich verwendet habe, Str1.Split zu konvertieren "Tim is nice" in

(Tim, ist schön)

Auch, wenn einer meiner Code schlechte Syntax oder ähnliches ist, lassen Sie mich wissen, ich bin in erster Linie ein Python-Programmierer.

+0

Wie wird der erste Block gespeichert/wo ist es? Hat es Zeilenumbrüche im langen Text? – Plutonix

+0

@Plutonix Es wird in einer String-Variablen mit Newline-Zeichen gespeichert. Ich bin in der Lage, die Zeilen mit diesem zu trennen: Str1.Split (new String() {Environment.NewLine}, StringSplitOptions.None) – computhomas

+0

Fügen Sie das zu der Frage hinzu ([Bearbeiten]), so wissen wir, was der Ausgangspunkt ist. – Plutonix

Antwort

2

Dieses ist nicht ein 2D-Array:

((Tim, ist schön), (Jim ist, bedeutet))

Das ist ein verzweigtes Array oder ein Array von Arrays ist. Da jede Zeile/jeder Satz möglicherweise nicht die gleiche Anzahl von Wörtern hat, ist es eine bessere Wahl. Für Ihr Beispiel haben Sie ein Array von 2, um jede "Zeile" zu halten, dann wird jedes von diesen ein Array von so vielen Wörtern enthalten, die es gibt.

Dim original = "Tim is nice" & Environment.NewLine & "Jim is very mean" 

Dim lines = original.Split(New String() {Environment.NewLine.ToString}, 
          StringSplitOptions.RemoveEmptyEntries) 

Dim results(lines.Count - 1)() As String 
For n As Int32 = 0 To lines.Count - 1 
    ' store array of words to results(n) 
    results(n) = lines(n).Split(" "c) 
Next 
' glue a line back together and show it 
Console.WriteLine(String.Join(" ", results(1))) 

results(0) werden die Tim Worte halten, results(1) wird die Jim Worte halten. (Von der Writeline):

Jim sehr bedeuten

+0

Also wären die Ergebnisse (0,2) "nett"? Was ist der Unterschied zwischen den Funktionen Count und Length? – computhomas

+0

'Ergebnisse (0,2)' würde funktionieren, wenn es ein 2D-Array wäre, wäre 'results (0) (2)' '' nice "'. Es gibt keinen wirklichen Unterschied zwischen Länge und Anzahl. Count ist eine Erweiterungsmethode, die es syntaktisch erlaubt, Array-Refs mit anderen modernen Kollektionen zu vergleichen. – Plutonix

+0

Ok, danke, das ist genau das was ich gesucht habe. Als Randnotiz haben die Daten, mit denen ich arbeite, immer dieselbe Anzahl von Wörtern in jeder Zeile. Würde es Vorteile haben, ein 2D-Array anstelle des gezackten zu verwenden? – computhomas