cnt Array mit Bedingung
Hallo zusammen,
kann ich z.B. alle "a" in einem Array zählen?
Ich habe ein Textfeld "originalText" mit beliebigem Text. Über folgenden Code
let cleanText := lower(replace(originalText, " ", ""));
let myList := sort(unique(split(cleanText, "")));
join(myList, "
")
erzeug ich in einem Berechnungsfeld eine Liste mit den im Text vorkommenden Buchstaben. Jetzt hätte ich dahinter gerne noch die Anzahl der Vorkommen. Über cnt und where kann ich aber wohl keine Arrays mit Bedingung durchsuchen.
Das Ergebniss sollte irgendwie so aussehen
originalText = "Hallo Text"
Berechnungsfeld =
a = 1
e = 1
h = 1
l = 2
o = 1
t = 2
x = 1
Allgemein gesagt wäre die Anforderung also:
Wie oft kommt jedes item aus Array1 in Array2 vor?
Vielen Dank für Ideen und Anregungen
Johannes
4 Antworten
-
Hallo Johannes, mein Lösungsvorschlag ist wahrscheinlich nicht sehr elegant, sollte aber funktionieren:
let A1 := split(replacex(lower(originalText), "[^a-z0-9]", ""), "");
let A2 := unique(A1);
let A3 := for i2 in A2 do
let CZ := 0;
for i1 in A1 do
CZ := if i1 = i2 then CZ + 1 else CZ end
end;
i2 + " = " + CZ
end;
join(A3, "
")
-
Ach so, du wolltest es ja auch noch sortieren. Dann halt
...
join(sort(A3), "
")
-
Ja wunderbar! Herzlichen Dank! Und mit replacex gleich nochmal was dazu gelernt. Erspart mir an anderer Stelle das verschachteln von replace.
11 Zeilen Code für die Aufgabe find ich übrigens mehr als elegant.
-
Ein bisschen kürzer hab ich es jetzt doch noch...
let A := split(replacex(lower(originalText), "[^a-z0-9]", ""), "");
let B := unique(A);
let C := for ii in B do
let D := for tt in A do
if ii = tt then ii end
end;
ii + " = " + cnt(D)
end;
join(sort(C), "
")
Content aside
-
1
„Gefällt mir“ Klicks
- vor 4 JahrenZuletzt aktiv
- 4Antworten
- 664Ansichten
-
1
Folge bereits