我怎么能实现这个?我认为我的解决方案很脏,我想做得更好.我认为在Ruby中有一种简单的方法可以做到这一点,但我不记得了.我想在Rails中使用它,所以如果Rails提供类似的东西也可以.用法应该是这样的:
fruits = ['banana', 'strawberry', 'kiwi', 'orange', 'grapefruit', 'lemon', 'melon']
# odd_fruits should contain all elements with odd indices (index % 2 == 0)
odd_fruits = array_mod(fruits, :mod => 2, :offset => 0)
# even_fruits should contain all elements with even indices (index % 2 == 1)
even_fruits = array_mod(fruits, :mod => 2, :offset => 1)
puts odd_fruits
banana
kiwi
grapefruit
melon
puts even_fruits
strawberry
orange
lemon
Run Code Online (Sandbox Code Playgroud)
*******编辑*******
对于那些想知道的人,这就是我最终做到的:
在rails项目中,我创建了一个新文件config/initializers/columnize.rb,如下所示:
class Array
def columnize args = { :columns …Run Code Online (Sandbox Code Playgroud) 不确定这是否可行,但有一种自动方式,使用mod或类似的东西,自动纠正错误的输入值?例如:
If r>255, then set r=255 and
if r<0, then set r=0
Run Code Online (Sandbox Code Playgroud)
所以基本上我要问的是一个聪明的数学方法来设置它而不是使用
if(r>255)
r=255;
if(r<0)
r=0;
Run Code Online (Sandbox Code Playgroud) 我有一个小问题试图弄清楚模运算是如何计算的。我正在建立一个队列,所以我有一个循环数组。我无法弄清楚这个模运算是如何工作的。
给定 q:一个长度为 5 个元素的字符数组,MAX 常量给出了数组的最大长度 "5" 罕见是一个整数,它表示数组 q 中的第一个可用位置
public void enqueue(Character c)throws FullQueueException{
if(size()== MAX -1){ //if only 1 place left, is full, throw exc
throw new FullQueueException("Queue is full");
}
q[rare]=c;
rare=(rare+1)%MAX;
}
Run Code Online (Sandbox Code Playgroud)
现在,假设稀有的“第一个空位”是 3,那么方法完成后稀有值是多少?这是我没有得到的,rare=(rare+1)%MAX 表示rare=4%5,这给出了rare=0,8。
方法大小相同:
public int size() {
return (MAX - front + rear) % MAX;
}
Run Code Online (Sandbox Code Playgroud)
给定,front,一个表示数组中第一个元素的 int 变量假设前面是 1 和罕见的 4,所以数组中有 3 个元素,所以大小是 (5-1+4)%5 也就是 8%5给出 1.6,而实际大小是 3 有什么建议吗?这可能比 java 更数学,但可能你们中的一些人之前遇到过同样的疑问。谢谢!
我试图找到一个数 x 的最大素数除数。当 x 小于 10 亿时,我的代码可以工作,但是当它大于 10 亿时,它会出现溢出错误,并且调试会突出显示其中包含 Mod 的行。
Sub Largest_Divisor()
Dim x As Double
Dim Q As Integer
Q = 0
Dim L() As Double
x = 999999999#
Dim i As Double
For i = 775145 To 3 Step -2
If x Mod i = 0 Then
If IsPrime(i) Then
ReDim Preserve L(Q) As Double
L(Q) = i
Q = Q + 1
End If
End If
Next i
MsgBox (Application.Max(L))
End Sub
Run Code Online (Sandbox Code Playgroud) 以此代码为例:
print 2.0 == 2 #---> returns True
print 12 % 5 #---> returns 2
print ((12.0 / 5) - (12 / 5)) * 5 #---> returns 2.0
print ((12.0 / 5) - (12 / 5)) * 5 == 12 % 5 #---> returns False (What the hell happens here?)
Run Code Online (Sandbox Code Playgroud) 在Python文档它说:" %(模)运算符产生了由第二的第一个参数的除法的余数. "
所以给定
a % b
Run Code Online (Sandbox Code Playgroud)
据我所知,剩余部分是将A除以B均匀分开的数字.所以21%3 = 0,-25%23 = -2.我不明白的是当A为负时会发生什么.
例如,
-23 % 22
Run Code Online (Sandbox Code Playgroud)
会产量
21
Run Code Online (Sandbox Code Playgroud)
这是第一个正整数,它是一致的模数-1.但-1是剩余的-23%22.那么文档错了吗?Python中的模运算符%不会产生%b中的余数,而是与B一致的第一个正整数?我很困惑.
如果我有一个 char 指针,char *ptr它保存单个 ascii 字符的地址,并且想要在该地址上使用模运算符,我该怎么做?每当我尝试使用诸如 之类的基本操作来执行此操作时int modulo = ptr % 16,我都会收到错误“二进制 % 的操作数无效”我对二进制算术的掌握很弱,所以我知道我需要继续发展这项技能,但如果有人可以告诉我我在这里缺少什么概念,这将是一个很大的帮助,谢谢。
编辑:抱歉,我不太清楚我想要完成什么,但基本上我只需要显示一块有 16 个插槽的内存。它是一个程序,在数组中找到一个 ascii 字符,我已经完成了,然后显示存储该 ascii 字符的内存块。当我现在运行它时,它会显示找到的 ascii 字符以及找到的字符后面的 15 个字符及其内存位置。相反,如果找到的 ascii 字符位于内存块的中间,我需要它来显示它周围存储的内容,而不仅仅是它后面的内容。因此,如果找到的字符位于数组的 23 槽中,则程序将显示数组的 16-31 槽中的字符和内存位置。
我发现增加有限变量的方法非常温和,只需:
++i %= range;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个技巧不适用于减量,因为-1 % v == -1.
如何在C++中改进这一点?
有人可以向我解释这段代码吗?我明白它的作用,但我不明白它是如何工作的。
# >n 0 d
[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]
# >0 n d-n%d n%d n/d
Run Code Online (Sandbox Code Playgroud) 是否可以使用模运算创建python for循环?我在 Python 中有一个环形缓冲区,我想迭代startPos和endPos索引之间的元素,其中的startPos值可以大于endPos. 在其他编程语言中,我会用模运算符直观地实现这一点:
int startPos = 6;
int endPos = 2;
int ringBufferSize = 8;
for(int i = startPos, i != endPos, i = (i+1) % ringBufferSize) {
print buffer.getElementAt(i);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Python 中轻松做到这一点?我只找到了
for i in list:
print buffer[i]
Run Code Online (Sandbox Code Playgroud)
语法但没有为我的问题提供等效解决方案。
我的下一个方法是在迭代存储在列表中的索引之前提前创建列表。但是有没有办法像在其他编程语言中一样通过直接在 for 循环中使用模运算来做到这一点?