给定一个字母数组arr = ["a","b","c","d","f"]
,我想构建一个数组,其中包含arr
中{(1}}中未包含的arr
中最小和最大字母之间的所有字母(按ASCII值) }。这将是["e"]
。我怎么能这样呢?
答案 0 :(得分:4)
pg_dump -U USERNAME DBNAME > dbexport.pgsql
答案 1 :(得分:4)
假设数组中的字母在" a"到" z"并按字母顺序排序,您可以获取数组的first
和last
元素:
given_letters = ["a", "b", "c", "d", "f"]
first_letter = given_letters.first #=> "a"
last_letter = given_letters.last #=> "f"
并致电String#upto
和Enumerable#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]
如果已知e
和sm < 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