对不起,标题很糟糕,这就是问题所在。
我正在一本正在学习的书中做一个练习,希望我:
从包含大量单词的列表中,仅找到以"D"开头的单词,将单词大写,并按从小到大对它们进行排序。
这是我到目前为止所拥有的:
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
我传递给findD
的数据是
(只是从文件中读取的一串单词.txt"
"adultnnaeroplanennairnnaircraft Carriernnairforcennairportnnalbumnnalphabetnnapplennarmnnarmynnbabynnbabynnbackpacknnballoonnnbananannbanknnbarbecuennbathroomnnbathtubnnbednnbednnbeennbiblennbiblennbirdnnbombnnbooknnbossnnbottlennbowlnnboxnnboynnbrainnnbridgennbutterflynnbuttonnncappuccinonncarnncar-racenncarpetnncarrotnncavennchairnnchess Boardnnchiefnnchildnnchiselnnchocolatesnnchurchnnchurchnncirclenncircusnncircusnnclocknnclownnncoffeenncoffee-shopnncometnncompact Discnncompassnncomputernncrystalnncupnncyclenndata Basenndesknndiamondnndressnndrillnndrinknndrumnndungnnearsnnearthnneggnnelectricitynnelephantnnerasernnexplosivenneyesnnfamilynnfannnfeathernnfestivalnnfilmnnfingernnfirennfloodlightnnflowernnfootnnforknnfreewaynnfruitnnfungusnngamenngardennngasnngatenngemstonenngirlnnglovesnngodnngrapesnnguitarnnhammernnhatnnhieroglyphnnhighwaynnhoroscopennhorsennhosennicennice-creamnninsectnnjet fighternnjunknnkaleidoscopennkitchennnknifennleather jacketnnlegnnlibrarynnliquidnnmagnetnnmannnmapnnmazennmeatnnmeteornnmicroscopennmilknnmilkshakennmistnnmoney $$$$nnmonsternnmosquitonnmouthnnnailnnnavynnnecklacennneedlennonionnnpaintBrushnnpantsnnparachutennpassportnnpebblennpendulumnnpeppernnperfumennpillownnplanennplanetnnpocketnnpost-officennpotatonnprinternnprisonnnpyramidnnradarnnrainbownnrecordnnrestaurantnnriflennringnnrobotnnrocknnrocketnnroofnnroomnnropennsaddlennsaltnnsandpapernnsandwichnnsatellitennschoolnnsexnnshipnnshoesnnshopnnshowernnsignaturennskeletonnnslavennsnailnnsoftwarennsolidnnspace Shuttlennspectrumnnspherennspicennspiralnnspoonnnsports-carnnspot Lightnnsquarennstaircasennstarnnstomachnnsunnnsunglassesnnsurveyornnswimming Poolnnswordnntablenntapestrynnteethnntelescopenntelevisionnntennis racquetnnthermometernntigernntoiletnntonguenntorchnntorpedonntrainnntreadmillnntrianglenntunnelnntypewriternnumbrellannvacuumnnvampirennvideotapennvulturennwaternnweaponnnwebnnwheelchairnnwindownnwomannnwormnnx-raynn"
在iex
我正在做
{ :ok, fileContents } = File.read("sample.txt")
ReadFile.findD(fileContents)
返回[]
不确定为什么,我也不知道如何调试我尝试插入的pipeline
|> IO.puts
在管道中的每次调用之后,但这只会导致错误。任何帮助将非常感谢。
如果您提供的单词列表是您实际使用的单词列表,那么问题是没有以"D"
开头的单词[]
因此是正确的结果。
如果您想要以小写开头的单词"d"
那么您必须替换此行:
Enum.filter(fn(word) -> String.starts_with?(word, "D") end)
跟:
Enum.filter(fn(word) -> String.starts_with?(word, "d") end)
如果要检查两者,可以执行以下操作:
Enum.filter(fn(word) -> String.at(word, 0) in ["d", "D"] end)