如何在数组中找到丢失的字母

时间:2017-09-25 15:25:11

标签: ruby

给定一个字母数组arr = ["a","b","c","d","f"],我想构建一个数组,其中包含arr中{(1}}中未包含的arr中最小和最大字母之间的所有字母(按ASCII值) }。这将是["e"]。我怎么能这样呢?

3 个答案:

答案 0 :(得分:4)

pg_dump -U USERNAME DBNAME > dbexport.pgsql

答案 1 :(得分:4)

假设数组中的字母在" a"到" z"并按字母顺序排序,您可以获取数组的firstlast元素:

given_letters = ["a", "b", "c", "d", "f"]

first_letter = given_letters.first #=> "a"
last_letter  = given_letters.last  #=> "f"

并致电String#uptoEnumerable#to_a以检索所有连续字母的数组:

all_letters = first_letter.upto(last_letter).to_a
#=> ["a", "b", "c", "d", "e", "f"]

可用于通过Array#-计算与原始数组的差异:

all_letters - given_letters
#=> ["e"]

答案 2 :(得分:1)

ascii = arr.uniq.map(&:ord)
  #=> [97, 98, 99, 100, 102]
sm, lg = ascii.minmax
   #=> [97, 102]

如果已知esm < e.ord < lg不是e的元素,则只有一个字母arr,我们可以写下以下内容。

((sm+lg)*(lg-sm+1)/2 - ascii.sum).chr
  #=> (597 - 496).chr => 101.chr => "e"

这是因为sm..lg表示算术级数;因此,其元素之和等于

(sm+lg)*(lg-sm+1)/2
  #=> 597