小编smi*_*ael的帖子

PHP 数组中的迭代加深深度优先搜索

是否可以在 PHP 中使用级别数组实现 IDDFS 算法?

假设有以下树:

    A
   / \
  B   C
 / \   \  
D   E   F
Run Code Online (Sandbox Code Playgroud)

调用getNodes(A)结果为 Array(B, C),同样也getNodes(B)为 Array(D, E)。我已经编写了 getNodes 函数,将其与 BFS 算法一起使用,不幸的是它太慢了。

代码格式的表单注释:

function bfs($start,$target){
    $dist = 0; 

    if(empty($queue)){
        $queue = array(); 
    }; 

    if(empty($checked)){
        $checked = array();
    }; 

    array_push($queue, $start); 
    while(!empty($queue)):
        $dist = $dist + 1;
        $newqueue = array();

        foreach($queue as $node){
            if(!in_array($node,$checked)){
                array_push($checked,$node);
                $nodes=getNodes($node);
                if(checkNode($nodes,$target)){
                    return $dist;
                }else{
                    $newqueue=$nodes;
                }
            } 
            $queue = $newqueue; 
        } 
    endwhile;

    return false;
}
Run Code Online (Sandbox Code Playgroud)

php

5
推荐指数
1
解决办法
4923
查看次数

正则表达式匹配MediaWiki模板及其参数

我正在编写一个简单的Javascript来将特定参数添加到当前正在编辑的文章中的特定模板.

维基百科模板的结构如下:

 {{Template name|unnamed parameter|named parameter=some value|another parameter=[[target article|article name]]|parameter={{another template|another tamplate's parameter}}}}
Run Code Online (Sandbox Code Playgroud)

一个模板也可以在更多行上,例如:

{{Template 
|name=John
|surname=Smith
|pob=[[London|London, UK]]
}}
Run Code Online (Sandbox Code Playgroud)

如需进一步参考,请查看http://en.wikipedia.org/wiki/Help:Template

首先,我想匹配整个模板.我找到了部分解决方案,即:

document.editform.wpTextbox1.value.match(/\{\{template name((.|\n)*?)\}\}$/gmis)
Run Code Online (Sandbox Code Playgroud)

但问题是它只匹配初始括号中的文本,直到第一个嵌套模板(第一个示例)的右括号.

另外我想以数组形式获取其参数.所以对于结果,我想得到一个具有特定顺序参数的数组.数组(参数pob的值,参数名称的值,参数姓氏的值,参数pod的值(在这种情况下为空,因为它未设置))

我会用它来清理一些文章中的非标准化格式并添加一些新参数.

谢谢!

javascript regex wikipedia

4
推荐指数
1
解决办法
1455
查看次数

c ++ map的.containsKey()方法

我想保存一些重复的工作,并编写一个模仿Java .containsKey()方法的函数.

基本上我想要这样的东西:

 using namespace std;
 map<string,XYclass> mymap;
 if (!contains(mymap,"key as string") ) cout << "key not found" << endl;
Run Code Online (Sandbox Code Playgroud)

在C++中,如果地图包含以下方式的键,则可以检查:

 m.find(str) != m.end();
Run Code Online (Sandbox Code Playgroud)

我想写一个泛型方法,如果一个键包含在一个映射中,它返回true.

到目前为止我有以下内容:

template<typename A, typename B> inline bool contains(const std::map< A, B > m, const A& str)
{
    return m.find(str) != m.end();
}
Run Code Online (Sandbox Code Playgroud)

当我在map<string,int>跟随调用的情况下运行它时,将无法进行模板参数推导,contains(mymap,"key as string")因为"key as string"实际上是一个char数组.

当我进行显式实例化时(即通过使用以下调用contains<string,int>(mymap,"key as string")),函数工作正常

怎么做得好?

c++ templates

4
推荐指数
2
解决办法
1572
查看次数

使用sed/awk从ini样式文件中读取值

我写了一个简单的bash函数,它将从ini文件(由变量定义CONF_FILE)中读取值并输出它

getConfValue() {
 #getConfValue section variable
 #return value of a specific variable from given section of a conf file
 section=$1
 var="$2"
 val=$(sed -nr "/\[$section\]/,/\[/{/$var/p}" $CONF_FILE)
 val=${val#$var=}
 echo "$val"
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果节名称中的多个变量共享公共子串,它不会忽略注释并遇到麻烦.

示例ini文件:

[general]
# TEST=old
; TEST=comment  
TEST=new
TESTING=this will be output too
PATH=/tmp/test
Run Code Online (Sandbox Code Playgroud)

运行getConfValue general PATH将按/tmp/test预期输出,但运行getConfValue general TEST显示此方法存在的所有问题.

如何解决?

我知道有一些专用的工具,比如crudinipython,perl和php的工具,但是我不希望为简单的配置文件解析添加额外的依赖.结合awk而不是sed的解决方案也可以.

bash awk ini sed

4
推荐指数
1
解决办法
686
查看次数

仅获取具有正键的数组元素

如何使用PHP中的负整数键过滤掉数组元素?

所以,如果我有一个数组:

Array (
    [-3] => Academic degree
    [-4] => Academic discipline
    [-5] => African American history
    [-6] =>
    [1] => Art
)
Run Code Online (Sandbox Code Playgroud)

结果将是:Array ( [1] => Art ).

我的想法是使用这样的东西:

$ arr = array(' - 1'=> 1,' - 2'=> 2,'3'=> 3,'element4'=> 4); $ filterOutKeys = array(' - 1',' - 2');

$ filteredArr = array_diff_key($ arr,array_flip($ filterOutKeys))

但是在处理更大的阵列时,它变得非常不切实际.

php arrays

3
推荐指数
1
解决办法
1389
查看次数

如何在lisp中全局更改函数内的变量值

我想知道是否有任何方法可以使用LISP中的指针模拟C行为.在C中如果更改变量的值,该指针指向,则它具有全局效果(即该值也将在函数外部更改).

所以,如果我有

(defun mutate ( a ) 
   (some-magic-function a 5)
)
Run Code Online (Sandbox Code Playgroud)

无论以前是什么,a都会在调用mutate后转为5.

我知道带有列表的元素有可能(很多是副作用) 在common-lisp中,如何在不更改原始列表的情况下从函数中修改list参数的一部分? 但我想知道如何为整个清单做这件事.

lisp common-lisp argument-passing

2
推荐指数
1
解决办法
2652
查看次数

如何为 PHP 数组中的每个元素附加属性

假设我们有一个数组,每个元素都有一个属性:

Array ( [0] => A [1] => B [2] => C [3] => D ) 
Run Code Online (Sandbox Code Playgroud)

是否可以给每个元素添加相同的统一属性,从而得到一个新的二维数组?即对于属性 X:

Array ( [0] => Array ( [0] => A [1] => X)
        [1] => Array ( [0] => B [1] => X)
        [2] => Array ( [0] => C [1] => X) )
Run Code Online (Sandbox Code Playgroud)

我知道,我可以使用 for every 循环来做到这一点,但是有没有更优雅的解决方案(例如 array_combine)?

(关于赋值不同的值,请参考:为每个数组元素赋值 PHP

php arrays

0
推荐指数
1
解决办法
1805
查看次数

标签 统计

php ×3

arrays ×2

argument-passing ×1

awk ×1

bash ×1

c++ ×1

common-lisp ×1

ini ×1

javascript ×1

lisp ×1

regex ×1

sed ×1

templates ×1

wikipedia ×1