- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有两个长度未知的数组。一个的元素需要均匀(尽可能均匀地)分布在另一个中。
示例假设数组中的 + 元素是实际值的占位符。我省略了数组逗号分隔符以消除视觉噪音并使模式更加明显。
a = [++++++++++] # 10 element array with + characters representing array items
b = [] # empty array
a.interweave(b) #=> [++++++++++]
b = [1]
a.interweave(b) #=> [+++++1+++++]
b = (1..2).to_a
a.interweave(b) #=> [+++1+++2++++]
b = (1..3).to_a
a.interweave(b) #=> [++1++2+++3+++] # any remaining + are distributed to the end chunks.
b = (1..4).to_a
a.interweave(b) #=> [++1++2++3++4++]
b = (1..5).to_a
a.interweave(b) #=> [+1+2++3++4++5++]
b = (1..6).to_a
a.interweave(b) #=> [+1+2+3+4++5++6++]
b = (1..7).to_a
a.interweave(b) #=> [+1+2+3+4+5+6++7++]
b = (1..8).to_a
a.interweave(b) #=> [+1+2+3+4+5+6+7+8++]
b = (1..9).to_a
a.interweave(b) #=> [+1+2+3+4+5+6+7+8+9+]
b = (1..10).to_a
a.interweave(b) #=> [+1+2+3+4+5+6+7+8+9+10]
b = (1..11).to_a
a.interweave(b) #=> [+,1,+,2,+,3,+,4,+,5,+,6,+,7,+,8,+,9,+,10,11] # the remaining elements from b are added to the end
我正在寻找 Ruby 中的高性能算法。
最佳答案
另一种方式:
def weave(xx,yy)
x = xx.dup
y = yy.dup
n_extra = [y.size - x.size + 1, 0].max
y_extra = y.slice!(y.size - n_extra, n_extra)
z = x.class.new
loop do
z += (x.slice!(0,((x.size)/(y.size+1.0)).floor) + y.slice!(0,1))
break if y.empty?
end
z + x + y_extra
end
x = ('-'*10).chars
# => ["-", "-", "-", "-", "-", "-", "-", "-", "-", "-"]
p weave(x, ['a', 'b', 'c'])
# => ["-", "-", "a", "-", "-", "b", "-", "-", "-", "c", "-", "-", "-"]
p weave(x, ['a', 'b', 'c']).join # => "--a--b---c---"
p weave('----------', 'abc') # => "--a--b---c---"
y = (1..12).each_with_object([]) {|i,a| a << ('a'..'z').to_a.first(i)}
y.each {|e| p weave(x, e).join}
"-----a-----"
"---a---b----"
"--a--b---c---"
"--a--b--c--d--"
"-a-b--c--d--e--"
"-a-b-c-d--e--f--"
"-a-b-c-d-e-f--g--"
"-a-b-c-d-e-f-g-h--"
"-a-b-c-d-e-f-g-h-i-"
"-a-b-c-d-e-f-g-h-i-j"
"-a-b-c-d-e-f-g-h-i-jk"
"-a-b-c-d-e-f-g-h-i-jkl"
编辑:我对原来的解决方案做了一些修改:
weave
的前两行,因此参数不会被更改。(arr + x + y_extra)
的末尾删除了 .join
。z = []
更改为 z = x.class.new
以允许 weave
的参数为数组或字符串。关于 ((x.size)/(y.size+1.0)).floor
的一句话。假设 x = ['-','-','-','-','-','-'] 和 y = ['a', 'b', 'c']
。然后:
z => ['-', 'a']
, x => ['-','-','-', '-','-']
和 y => ['b', 'c']
。x
的剩余部分将被划分为 y.size+1.0 => 3.0
间隔,每个间隔有 x.size/3.0 => 5/3.0 => 1.67
个元素,如果 x
的元素可以被分割。因为它们不能被分割,并且较大的组在右边,我们从 x
中剥离 1.67.floor => 1
元素,附加它和y
到 z
的下一个元素,然后重复,直到 y.empty? => 真
。 关于Ruby - 在另一个长度未知的数组中均匀分布和交错/交织一个数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223370/
我有两个列表,保证第一个比第二个多一个项目。我想知道创建一个新列表的最 Pythonic 方法,该列表的偶数索引值来自第一个列表,奇数索引值来自第二个列表。 # example inputs list
我正在尝试构建一个导航,它在显示菜单/导航时错开包含的列表项的外观。 我有一个汉堡符号,单击它时会呈现导航(全屏)。我现在想要一个动画,其中不同的列表项(实际链接)出现时彼此有一些延迟,顶部的是第一个
我想在 jquery 1.3 中为一系列项目制作动画,每个下一个项目在第一个动画的中途开始。换句话说,我想要一个半队列的效果。我尝试使用下面的代码,但它不起作用。有人有什么想法吗? $("h3
我按照这篇文章创建了交错布局。 No good example about RecyclerView and StaggeredGridLayoutManager in Android Docs 当我
我有一个包含数据和类的表,比如 ---------------- | DATA | Class | ---------------- | 1 | A | | 2 | A |
这个问题在这里已经有了答案: Interweaving two numpy arrays (13 个答案) 关闭 4 年前。 我正在尝试如下交错数组。 import numpy as np x =
我想创建两个输出交错的线程,如下所示 Thread1:1=>Ping! Thread2:2=>Pong! Thread1:3=>Ping! Thread1:4=>Ping! Thread2:
这个问题在这里已经有了答案: How to elegantly interleave two lists of uneven length? (9 个回答) How to interleave tw
我试图在 GridView 中显示字符串的动态列表。每个单词都是可点击的,可以选择或取消选择。我附上了 Flipboard 的屏幕截图,因为我想要完全相同的功能。 请帮助我找出要在我的应用中实现的相同
这个问题在这里已经有了答案: Merge two lists (6 个回答) 4年前关闭。 有没有办法可以合并 2 个列表 let a = ["a"; "b"; "c"] let b = ["d";
我正在尝试使用 tf.data.Dataset 来交错两个数据集,但这样做时遇到问题。给出这个简单的例子: ds0 = tf.data.Dataset() ds0 = ds0.range(0, 10,
我有一个元素数组 1 5 9(例如 a1 a2 a3) 第二个元素数组 2 4 8 (e.g. b1 b2 b3) 我希望输出为 1,2 5,4 9,8(即 a1,b1 a2,b2 a3,b3)...
我这里有解决方案代码: // Pre-condition: The fronts of two linked lists are provided. // Post-condition: A link
我有一个矩阵,我想根据下面描述的以下方案按行进行洗牌: 我们有矩阵a: import numpy as np np.random.seed(0) low = -5 high = 5 num_frame
我继承了一些在 Linux 嵌入式平台上运行的 ALSA 代码。现有的实现使用 snd_pcm_readi() 和 snd_pcm_writei() 来阻塞读取和写入。 我的任务是让它在 ARM 处理
我如何将 2 个矩阵 A、B 合并为一个,以便新矩阵 C = A 的第 1 行,然后是 B 的第 1 行,然后是 A 的第 2 行,B 的第 2 行,A 的第 3 行,行B 的 3 等等?最好没有 f
如果我像这样迭代 std::map: typedef std::map clist; clist m_connections; for (const auto itt : m_connections)
我在弄清楚 boost 图像库时遇到了一些问题。 我找不到任何关于如何使用 boost::gil 库中包含的 interleaved_view 函数的确切文档。更具体地说,我不知道原始数据应该以什么二
而不是通过编写创建对象: obj: object [ name: "Fork" id: 1020 ] 我想写一些类似... obj: something-or-another [nam
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:lan
我是一名优秀的程序员,十分优秀!