我对不同语言可以加入数组的可能方式感兴趣,而不是使用单个连接字符串,而是在给定的时间间隔使用不同的连接字符串。
例如(假设语言):
Array.modJoin([mod, char], ...)
e.g. [1,2,3,4,5].modJoin( [1, ","], [2, ":"] )
在参数指定包含模数和连接字符的数组或对象的情况下,实现将检查哪个模数顺序优先(最新的),并应用连接字符。(要求 [mod,char] 以 mod 升序提供)
IE
if (index % (nth mod) == 0)
append (join char)
continue to next index
else
(nth mod)-- repeat
when complete join with ""
例如,我在 Ruby 中提出了以下内容,但我怀疑存在更好/更优雅的方法,这就是我希望看到的。
#Create test Array
#9472 - 9727 as HTML Entities (unicode box chars)
range = (9472..9727).to_a.map{|u| "&##{u};" }
假设我们有一个模组和连接字符列表,我们必须规定模组的价值随着列表的进展而增加。
mod_joins = [{m:1, c:",", m:12, c:"<br/>"]
现在处理range
withmod_joins
processed = range.each_with_index.map { |e, i|
m = nil
mods.reverse_each {|j|
m = j and break if i % j[:m] == 0
}
# use the lowest mod for index 0
m = mods[0] if i == 0
m = nil ? e : "#{e}#{m[:c]}"
}
#output the result string
puts processed.join ""
从这里我们有一个 htmlEntities 列表,用分隔,,
除非它的索引是第 12 模,在这种情况下它是<br/>
因此,我对可以更优雅地完成此操作的方法很感兴趣,主要是在 Haskell、F#、Common Lisp(Scheme、Clojure)等函数式语言中,但在具有列表理解扩展等的通用语言中也有很酷的方法来实现这一点作为 C# 与 Linq、Ruby 和 Python 甚至 Perl。