arrays - 列表理解的方法,以设定的间隔将不同的字符串连接到列表中。 (与语言无关)

标签 arrays list language-agnostic dictionary list-comprehension

我对不同语言连接数组的可能方式感兴趣,但不是使用单个连接字符串,而是在给定的时间间隔使用不同的连接字符串。

例如(假设语言):

Array.modJoin([mod, char], ...)
e.g. [1,2,3,4,5].modJoin( [1, ","], [2, ":"] )

如果参数指定包含模数和连接字符的数组或对象,则实现将检查模数的哪个顺序优先(最新的顺序),并应用连接字符。 (要求以 mod 升序提供 [mod,char])

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 和连接字符的列表,我们必须规定 mod 的值随着列表的进展而增加。

mod_joins   = [{m:1, c:",", m:12, c:"<br/>"]

现在处理rangemod_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)等函数式语言中,但也有在具有列表的通用语言中实现这一点的很酷的方法理解扩展,例如使用 Linq、Ruby 和 Python 甚至 Perl 的 C#。

最佳答案

这是一个更简单、更易读的 Ruby 解决方案

array = (9472..9727).map{|u|"&##{u};"}
array.each_slice(12).collect{|each|each.join(",")}.join("<br/>")

或者对于一般情况

module Enumerable   
  def fancy_join(instructions)
    return self.join if instructions.empty?
    separator = instructions.delete(mod = instructions.keys.max)
    self.each_slice(mod).collect{|each|each.fancy_join(instructions.dup)}.join(separator)
  end
end

range = (9472..9727).map{|u|"&##{u};"}
instructions = {1=>",",12=>"<br/>"}

puts array.fancy_join(instructions)    

关于arrays - 列表理解的方法,以设定的间隔将不同的字符串连接到列表中。 (与语言无关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983875/

相关文章:

javascript - 在嵌套的 js 对象数组中搜索

java - 如何将支票转换为包含小数位的文字

javascript - 如何用另一个数组扩展现有的 js 数组?

c - 找出遍历链表时出现段错误的最佳方法是什么?

python - 以列表作为值的字典

c++ - 无法遍历模板列表 C++

c - "backspace"转义字符 '\b' : unexpected behavior?

java - 确定用户感知字符数的正确算法是什么?

language-agnostic - 可构造点的坐标可以精确表示吗?

javascript - 从 JavaScript 中的数组中提取最重复的值(使用 jQuery)