【问题标题】:How do i write a function that iterates through a list of sets of elements of varied amounts extracting sequential arrays of 4我如何编写一个函数,该函数遍历一系列不同数量的元素,提取 4 个顺序数组
【发布时间】:2020-11-02 12:08:51
【问题描述】:

我有一长串不同数量的元素集。对于每一行,我只想提取那些具有 4 个或更多元素的集合并将它们推送到单独的数组中。如果集合有超过 4 个元素,我想提取其中的每组 4 个元素。比如

a,b,c 
a,b,c,d 
d,b,c,a
a,b,d,c,a,d
a,d

返回

result = [ [a,b,c,d], [d,b,c,a] , [a,b,d,c], [b,d,c,a], [d,c,a,d] ]

请注意,倒数第二组元素在结果数组的末尾产生 3 个数组。

我将如何编写一个 JS 或 Ruby 函数/方法来返回这种结果??

【问题讨论】:

  • 这个“元素集列表”是什么?一个数组数组,一个巨大的字符串,还是别的什么?
  • @NickPerez:定义你所说的 set 是什么意思。它不能是 Ruby 数据类型Set,因为您显示的期望结果不是 Ruby 意义上的 Set,也不是数学意义上的。 AFIK,JavaScript 也没有称为 set 的东西。
  • @NickPerez:也请在一个问题中讨论 javascript 或 Ruby。两种语言都不同,我看不出如何以统一的方式合理地讨论这样的解决方案。
  • 每个“集合”如图所示 - 一行包含字符串元素。您在上面看到的是我必须遍历的 TXT 文件的 sn-p。我只需要一个解决方案。选择 ruby​​ 还是 js 取决于你

标签: javascript arrays ruby


【解决方案1】:

一个 Ruby 解决方案:首先选择足够大的数组,然后将所有连续的 4 个元素的系列放入结果中。

input = [['a','b','c'], ['a','b','c','d'], ['d','b','c','a'], ['a','b','d','c','a','d'], ['a','d']]

p input.select{|ar| ar.size >= 4}.flat_map{|ar| ar.each_cons(4).to_a }

# =>[["a", "b", "c", "d"], ["d", "b", "c", "a"], ["a", "b", "d", "c"], ["b", "d", "c", "a"], ["d", "c", "a", "d"]]

【讨论】:

    【解决方案2】:

    这是解决方案,我查看了数组,如果它的长度为 4,我只是将它推入结果,如果它大于 4,然后我迭代它以推入每个 4 的实例,我希望这是什么你想要的。

    const input = [['a','b','c'], ['a','b','c','d'], ['d','b','c','a'], ['a','b','d','c','a','d'], ['a','d']]
    const result = []
    
    input.forEach(arr => {
      if (arr.length === 4) {
        result.push(arr)
      } else if (arr.length > 4) {
        for (let i = 0; i < arr.length - 3; i++) {
          result.push(arr.slice(0 + i, 4 + i))
        }
      }
    })
    
    console.log('result = ', result)
    
    //result = [ [a,b,c,d], [d,b,c,a] , [a,b,d,c], [b,d,c,a], [d,c,a,d] ]

    【讨论】:

      【解决方案3】:

      另一个 Ruby 解决方案。

      input = [['a','b','c'], ['a','b','c','d'], ['d','b','c','a'],
               ['a','b','d','c','a','d'], ['a','d']]
      

      input.each_with_object([]) do |a,arr|
        a.each_cons(4) { |a4| arr << a4 } if a.size > 3
      end
        #=> [["a", "b", "c", "d"], ["d", "b", "c", "a"], ["a", "b", "d", "c"],
        #    ["b", "d", "c", "a"], ["d", "c", "a", "d"]]
      

      Enumerable#each_cons

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 2023-03-04
        • 1970-01-01
        相关资源
        最近更新 更多