私は、TVレーティング(テレビ番組用)を自分のコードでそのレーティングのケースオブジェクトに変換する必要があります。あなたは私が面倒であり、まだ「tv.14」のようなものを考慮していないそれぞれの評価、のすべての順列に一致するようにしようとしている見ることができるようにアルゴリズムに基づいて大文字と小文字が一致する文字列。どのアルゴリズムを使うべきですか?
def fromString(s: String): Option[TvRating] = s.toLowerCase match {
case "tvy" | "tv-y" | "tv y" | "y" => Some(tvY)
case "tvg" | "tv-g" | "tv g" | "g" => Some(tvG)
case "tvpg" | "tv-pg" | "tv pg" | "pg" => Some(tvG)
case "tv14" | "tv-14" | "tv 14" | "14" => Some(tv14)
case "tvma" | "tv-ma" | "tv ma" | "ma" => Some(tvMA)
case _ => Some(noTvRating)
}
、:したがって、私はそうのようなケースの試合を持っていますまたは "成熟した視聴者"である。
soundXのようなアルゴリズムはありますが、最後の手段として使用できるこれらの評価のようなコードがあります。そうすれば、私のコードは次のようになります:
def fromString(s: String): Option[TvRating] = s.toLowerCase match {
case "tvy" | "tv-y" | fancyAlgo(s, "tv-y") => Some(tvY)
case "tvg" | "tv-g" | fancyAlgo(s, "tv-g") => Some(tvG)
case "tvpg" | "tv-pg" | fancyAlgo(s, "tv-pg") => Some(tvG)
case "tv14" | "tv-14" | fancyAlgo(s, "tv-14") => Some(tv14)
case "tvma" | "tv-ma" | fancyAlgo(s, "tv-ma") => Some(tvMA)
case _ => Some(noTvRating)
}
またはこれらのマッチングをより強固にすることができる他の提案。 tv-gは「犬」や「馬」のような言葉ではないので、私はオーディオや同様の発音の言葉に基づいて行くことができません。
これは評価の一例です。他の試合もあります。スターティングの別の例(腐ったトマトの映画の評価など)
def fromString(s: String): Option[StarRating] = s.toLowerCase match {
case "1" | "one star" | "one stars" => Some(oneStar)
case "1.5" | "1.5 stars" | "one and a half stars" => Some(oneAndHalfStar)
case "2" | "2 stars" | "two stars" => Some(twoStars)
case "2.5" | "2.5 stars" | "two and a half stars" => Some(twoAndHalfStars)
case "3" | "3 stars" | "three stars" => Some(threeStars)
case "3.5" | "3.5 stars" | "three and a half stars" => Some(threeAndHalfStars)
case "4" | "4 stars" | "four stars" => Some(fourStars)
case _ => Some(noStars)
}
乾杯!駆動
は、私が探しているものと一致するファジー文字列ですか? – dlite922
私はあなたが何を意味するのか見ていますが、私は(一般的に)あなたは近くでは不可能であることを要求していると思います。 "pg"を意味するものには一致しますが、 "pg"それはあいまいな文字列のマッチングではないので、*と*一致するものが明白ではないので、 "tv-14"(例えば "14"のマッチが必要ですか? be done done –
'Option []'型の全体点は_might_で 'None'です。なぜあなたの例は 'None'条件を持っていませんか? – jwvh