2016-04-21 2 views
0

Sorry für den schrecklichen Titel, das ist buchstäblich, was das Problem ist.Der Versuch, einen String in einer Funktion mit ein paar Pipes mutieren zurückgibt leere Array

mir eine Übung in einem Buch zu tun ich lerne was will mich:

Aus einer Liste von vielen Worten, nur die richtigen Worte finden, die mit „D“ beginnen, in Großbuchstaben die Worte, und sortiere sie nach dem kleinsten bis zum größten.

Dies ist, was ich bisher:

defmodule ReadFile do 
    def findD(contents) do 
     contents 
     |> String.split("\n") 
     |> Enum.filter(fn(word) -> String.starts_with?(word, "D") end) 
     |> Enum.map(fn(word) -> String.upcase(word) end) 
     |> Enum.sort(fn(el1, el2) -> String.length(el1) > String.length(el2) end) 
    end 
end 

Die Daten, die ich zu findD

ist vorbei bin (nur eine Kette von einem Bündel von Wörtern aus einer file.txt` lesen

"adult\n\naeroplane\n\nair\n\naircraft Carrier\n\nairforce\n\nairport\n\nalbum\n\nalphabet\n\napple\n\narm\n\narmy\n\nbaby\n\nbaby\n\nbackpack\n\nballoon\n\nbanana\n\nbank\n\nbarbecue\n\nbathroom\n\nbathtub\n\nbed\n\nbed\n\nbee\n\nbible\n\nbible\n\nbird\n\nbomb\n\nbook\n\nboss\n\nbottle\n\nbowl\n\nbox\n\nboy\n\nbrain\n\nbridge\n\nbutterfly\n\nbutton\n\ncappuccino\n\ncar\n\ncar-race\n\ncarpet\n\ncarrot\n\ncave\n\nchair\n\nchess Board\n\nchief\n\nchild\n\nchisel\n\nchocolates\n\nchurch\n\nchurch\n\ncircle\n\ncircus\n\ncircus\n\nclock\n\nclown\n\ncoffee\n\ncoffee-shop\n\ncomet\n\ncompact Disc\n\ncompass\n\ncomputer\n\ncrystal\n\ncup\n\ncycle\n\ndata Base\n\ndesk\n\ndiamond\n\ndress\n\ndrill\n\ndrink\n\ndrum\n\ndung\n\nears\n\nearth\n\negg\n\nelectricity\n\nelephant\n\neraser\n\nexplosive\n\neyes\n\nfamily\n\nfan\n\nfeather\n\nfestival\n\nfilm\n\nfinger\n\nfire\n\nfloodlight\n\nflower\n\nfoot\n\nfork\n\nfreeway\n\nfruit\n\nfungus\n\ngame\n\ngarden\n\ngas\n\ngate\n\ngemstone\n\ngirl\n\ngloves\n\ngod\n\ngrapes\n\nguitar\n\nhammer\n\nhat\n\nhieroglyph\n\nhighway\n\nhoroscope\n\nhorse\n\nhose\n\nice\n\nice-cream\n\ninsect\n\njet fighter\n\njunk\n\nkaleidoscope\n\nkitchen\n\nknife\n\nleather jacket\n\nleg\n\nlibrary\n\nliquid\n\nmagnet\n\nman\n\nmap\n\nmaze\n\nmeat\n\nmeteor\n\nmicroscope\n\nmilk\n\nmilkshake\n\nmist\n\nmoney $$$$\n\nmonster\n\nmosquito\n\nmouth\n\nnail\n\nnavy\n\nnecklace\n\nneedle\n\nonion\n\npaintBrush\n\npants\n\nparachute\n\npassport\n\npebble\n\npendulum\n\npepper\n\nperfume\n\npillow\n\nplane\n\nplanet\n\npocket\n\npost-office\n\npotato\n\nprinter\n\nprison\n\npyramid\n\nradar\n\nrainbow\n\nrecord\n\nrestaurant\n\nrifle\n\nring\n\nrobot\n\nrock\n\nrocket\n\nroof\n\nroom\n\nrope\n\nsaddle\n\nsalt\n\nsandpaper\n\nsandwich\n\nsatellite\n\nschool\n\nsex\n\nship\n\nshoes\n\nshop\n\nshower\n\nsignature\n\nskeleton\n\nslave\n\nsnail\n\nsoftware\n\nsolid\n\nspace Shuttle\n\nspectrum\n\nsphere\n\nspice\n\nspiral\n\nspoon\n\nsports-car\n\nspot Light\n\nsquare\n\nstaircase\n\nstar\n\nstomach\n\nsun\n\nsunglasses\n\nsurveyor\n\nswimming Pool\n\nsword\n\ntable\n\ntapestry\n\nteeth\n\ntelescope\n\ntelevision\n\ntennis racquet\n\nthermometer\n\ntiger\n\ntoilet\n\ntongue\n\ntorch\n\ntorpedo\n\ntrain\n\ntreadmill\n\ntriangle\n\ntunnel\n\ntypewriter\n\numbrella\n\nvacuum\n\nvampire\n\nvideotape\n\nvulture\n\nwater\n\nweapon\n\nweb\n\nwheelchair\n\nwindow\n\nwoman\n\nworm\n\nx-ray\n\n" 

In iex ich tue

{ :ok, fileContents } = File.read("sample.txt")

ReadFile.findD(fileContents) Welche [] gibt

ich, warum nicht sicher bin, ich weiß auch nicht, wie man ein pipeline debuggen Ich habe versucht, das Einfügen

|> IO.puts

nach jedem Anruf in der Rohrleitung, aber Das hat nur zu Fehlern geführt. Jede Hilfe wäre großartig, danke.

+0

Verwenden Sie zum Debuggen 'IO.inspect' anstelle von' IO.puts'. 'IO.puts' dient zum Ausgeben von Strings, während' IO.inspect' zuerst 'Kernel.inspect' aufruft, um die gegebene Datenstruktur irgendwie als String darzustellen. –

Antwort

1

Wenn die von Ihnen angegebene Wortliste diejenige ist, die Sie tatsächlich verwenden, dann ist das Problem, dass es keine Wörter gibt, die mit "D" beginnen, also ist [] das richtige Ergebnis.

Wenn Sie also wollen, dass "d" mit einem niedrigeren Fall starten, dann wird diese Zeile ersetzen müssen:

Enum.filter(fn(word) -> String.starts_with?(word, "D") end) 

mit:

Enum.filter(fn(word) -> String.starts_with?(word, "d") end) 

Wenn Sie beide überprüfen möchten für Sie tun können :

Enum.filter(fn(word) -> String.at(word, 0) in ["d", "D"] end) 
+0

Danke Mann, fügte ein 'String.starts_with? (Wort," d ")' mein Problem behoben, erkannte nicht, dass es case sensitivie war? – Datsik

Verwandte Themen