编辑:对不起,但我忘了提到我需要计数器变量的值.所以制作一个循环并不是我害怕的解决方案.
我不确定这是否可行,但我想做以下事情.对于函数,传递数字数组.每个数字都是for循环的上限,例如,如果数组是[2, 3, 5],则应执行以下代码:
for(var a = 0; a < 2; a++) {
for(var b = 0; b < 3; b++) {
for(var c = 0; c < 5; c++) {
doSomething([a, b, c]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,嵌套for循环的数量等于数组的长度.有没有办法让这项工作?我正在考虑创建一段代码,将每个for循环添加到一个字符串,然后通过它进行评估eval.然而,我已经阅读过,这eval不应该是一个人的首选,因为它也会产生危险的结果.
这里适合哪种技术?
我的任务是帮助一些会计师解决他们遇到的常见问题 - 给出交易清单和总存款,哪些交易是存款的一部分?例如,假设我有这个数字列表:
1.00
2.50
3.75
8.00
Run Code Online (Sandbox Code Playgroud)
我知道,我的存款总额是10.50,我可以很容易地看到它弥补了中8.00和2.50交易.然而,鉴于一百笔交易和数百万美元的存款,它很快变得更加困难.
在测试蛮力解决方案(花费太长时间以实现)时,我有两个问题:
有了大约60个数字的列表,它似乎找到了十几个或更多的组合,任何合理的总数.我期待一个单一的组合来满足我的总数,或者可能是一些可能性,但似乎总是有很多组合.是否有一个数学原理描述了为什么会这样?看来,即使是中等大小的随机数集合,您也可以找到多个组合,几乎可以达到您想要的总数.
我为这个问题建立了一个强力解决方案,但它显然是O(n!),并且很快失控.除了明显的快捷方式(排除大于总数的快捷方式),有没有办法缩短计算时间?
我当前(超慢)解决方案的详细信息:
详细信息量列表从最大到最小排序,然后以下过程以递归方式运行:
通过这种方式,它可以快速排除较大的数字,将列表缩小到只需要考虑的数字.但是,它仍然是n!似乎永远不会完成更大的列表,所以我对我可以采取的任何快捷方式感兴趣 - 我怀疑即使从列表中删除1个数字也会将计算时间缩短一半.
谢谢你的帮助!
第一关,我是PHP的新手.我一直在使用for循环,while循环,foreach循环脚本.我想知道
我坚持的代码想知道要使用哪个循环.
for($i=0;$i<count($all);$i++)
{
//do some tasks here
for($j=0;$j<count($rows);$j++)
{
//do some other tasks here
}
}
Run Code Online (Sandbox Code Playgroud)
很明显我可以用while编写上面的代码.希望有人能帮助我找出哪个循环应该更好用.
我有一个问题,这是一个普通的编程问题,但我的实现是在Java中,所以我将以这种方式提供我的示例
我有一个这样的课:
public class Foo {
LinkedHashMap<String, Vector<String>> dataStructure;
public Foo(LinkedHashMap<String, Vector<String>> dataStructure){
this.dataStructure = dataStructure;
}
public String[][] allUniqueCombinations(){
//this is what I need to do
}
}
Run Code Online (Sandbox Code Playgroud)
我需要从my生成一个嵌套数组,LinkedHashMap它代表LHM中所有值的每个唯一组合.例如,如果我的LHM看起来像这样(伪代码,但我认为你可以得到这个想法......):
{"foo" => ["1","2","3"], "bar" => ["3","2"], "baz" => ["5","6","7"]};
Run Code Online (Sandbox Code Playgroud)
那么我的String [] []应该是这样的:
{
{"foo","bar","baz"},
{"1","3","5"},
{"1","2","5"},
{"1","3","6"},
{"1","2","6"},
{"1","3","7"},
{"1","2","7"},
{"2","3","5"},
{"2","2","5"},
{"2","3","6"},
{"2","2","6"},
{"2","3","7"},
{"2","2","7"},
{"3","3","5"},
{"3","2","5"},
{"3","3","6"},
{"3","2","6"},
{"3","3","7"},
{"3","2","7"},
}
Run Code Online (Sandbox Code Playgroud)
我认为这就是所有这些,我手动(显然)这样做,所以我可能错过了一套,但我认为这说明了我想要做的事情.只要存在所有独特的组合,每组的顺序无关紧要.另外需要明确的是,您不知道LHM中有多少元素,也不知道每个后续Vector中有多少元素.我找到的答案与你想要在一个数组中所有元素的每个独特组合的情况相匹配,但没有任何东西完全符合这一点.如果这是问题的完全重复,请在回复中添加一个链接,我将关闭该问题.
更新 - 我将我的类型更改为字符串,因为我的真实世界示例实际上是字符串.我试图使用整数来使示例更具可读性,但到目前为止我得到的答案并没有很好地转换为字符串.所以,是的,它们是数字,但在我的实际情况中,它们将是除了使用这个特定应用程序的人之外没有多大意义的字符串.所以,这只是它的抽象.
在最近使用ReSharper时,它建议我通过反转if条件和使用continue语句来减少某些地方的嵌套.
嵌套条件:
foreach(....)
{
if(SomeCondition)
{
//do some things
if(SomeOtherNestedCondition)
{
//do some further things
}
}
}
Run Code Online (Sandbox Code Playgroud)
继续陈述:
foreach(....)
{
if(!SomeCondition) continue;
//do some things
if(!SomeOtherNestedCondition) continue;
//do some further things
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么你想减少嵌套的性能和内存问题以及两个片段如何相互等同的逻辑,但是从我的开发背景来看,前面的例子在阅读代码时更容易理解.
您更喜欢哪种方法?为什么?你continue在日常代码中使用嵌套ifs吗?
对于一个组项目,我正在尝试为PHP创建一个模板引擎,对于那些语言不太熟练的人可以在他们的HTML中使用{name}之类的标签,而PHP将使用数组中的预定义变量替换该标签.以及支持循环.
这远远超出了项目的期望,但由于我有PHP的经验,我认为让我忙碌将是一个很好的挑战!
我的主要问题是,如何进行解析器的循环部分,这是实现这样一个系统的最佳方法.在您推荐现有模板系统之前,我更愿意自己创建它以获得经验,因为我们项目中的所有内容都必须是我们自己的.
目前,使用regex和preg_replace_callback进行基本解析,它会检查$ data [name]是否存在以及是否替换它.
我试图以各种不同的方式进行循环,但我不确定我是否在正确的轨道上!
给出解析引擎的数据的示例是:
Array
(
[title] => The Title
[subtitle] => Subtitle
[footer] => Foot
[people] => Array
(
[0] => Array
(
[name] => Steve
[surname] => Johnson
)
[1] => Array
(
[name] => James
[surname] => Johnson
)
[2] => Array
(
[name] => josh
[surname] => Smith
)
)
[page] => Home
)
Run Code Online (Sandbox Code Playgroud)
它正在解析的页面是这样的:
<html>
<title>{title}</title>
<body>
<h1>{subtitle}</h1>
{LOOP:people}
<b>{name}</b> {surname}<br />
{ENDLOOP:people}
<br /><br />
<i>{footer}</i>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它会产生类似于:
<html> …Run Code Online (Sandbox Code Playgroud) 考虑一下我是否有一个带有元组参数(x,y)的函数,其中x在范围(X)中,y在范围(Y)中,正常的方法是:
for x in range(X):
for y in range(Y):
function(x,y)
Run Code Online (Sandbox Code Playgroud)
有办法吗?
for xy in something_like_range(X,Y):
function(xy)
Run Code Online (Sandbox Code Playgroud)
这样xy是一个元组(x,y)?
我有10个文本文件,我希望paste每个文件都有一对,这样我就有5个文件.
我尝试了以下方法:
for i in 4_1 5_1 6_1 7_1 8_1
do
for j in 4_2 5_2 6_2 7_2 8_2
do
paste ${i}.txt ${j}.txt > ${i}.${j}.txt
done
done
Run Code Online (Sandbox Code Playgroud)
但是,此代码组合了所有可能的组合,而不是仅仅组合匹配对.
所以我想文件4_1.txt与配对4_2.txt,5_1.txt带5_2.txt等
我有一系列for循环,它们在原始的字符串列表上工作,然后逐渐过滤列表,例如:
import re
# Regex to check that a cap exist in string.
pattern1 = re.compile(r'\d.*?[A-Z].*?[a-z]')
vocab = ['dog', 'lazy', 'the', 'fly'] # Imagine it's a longer list.
def check_no_caps(s):
return None if re.match(pattern1, s) else s
def check_nomorethan_five(s):
return s if len(s) <= 5 else None
def check_in_vocab_plus_x(s,x):
# s and x are both str.
return None if s not in vocab else s+x
slist = ['the', 'dog', 'jumps', 'over', 'the', 'fly']
# filter with check_no_caps
slist = [check_no_caps(s) …Run Code Online (Sandbox Code Playgroud) 我有一个for嵌套在另一个for循环中的循环.我怎样才能使它在内循环中发生某些东西时,我们退出并跳转到外循环的下一次迭代?
uuu <- 0
for (i in 1:100) {
uuu <- uuu + 1
j <- 1000
for (eee in 1:30) {
j <- j - 1
if (j < 990) {
# if j is smaller than 990 I hope start next time of i
}
}
}
Run Code Online (Sandbox Code Playgroud) nested-loops ×10
for-loop ×2
loops ×2
php ×2
python ×2
accounting ×1
algorithm ×1
bash ×1
c# ×1
continue ×1
dictionary ×1
filter ×1
java ×1
javascript ×1
math ×1
parsing ×1
paste ×1
performance ×1
r ×1
recursion ×1
reduce ×1
resharper ×1
templates ×1
tuples ×1