Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我有字符串,我必须把它转换成散列,就像2号一样_Ruby On Rails - Fatal编程技术网

Ruby on rails 我有字符串,我必须把它转换成散列,就像2号一样

Ruby on rails 我有字符串,我必须把它转换成散列,就像2号一样,ruby-on-rails,Ruby On Rails,这是我的密码: 1. "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))" 2.{ "a" =>"1", "c" => "11" , "p" => "c=11,o=m,d=4"} 逐行: 第1行:设置变量string和起始字符串 string=“特殊过滤器,|过滤器”(&(a=1)(c=11)(p=c=11,o=m,d=4))” 第2行:设置一个变量hash,并填充一个空hash hash={}

这是我的密码:

 1. "special_filter,|filter_str,(&(a=1)(c=11)(p=c=11,o=m,d=4))"


 2.{ "a" =>"1", "c" => "11" , "p" => "c=11,o=m,d=4"}
逐行: 第1行:设置变量string和起始字符串

string=“特殊过滤器,|过滤器”(&(a=1)(c=11)(p=c=11,o=m,d=4))”

第2行:设置一个变量hash,并填充一个空hash

hash={}

第3行:

  • 剪切与此regexp匹配的字符串部分
string.slice(/\(&.*\)/)=>“(&(a=1)(c=11)(p=c=11,o=m,d=4))”

regexp以正斜杠(/regexp转到此处/)结尾。 括号在正则表达式中有特殊含义,因此必须用反斜杠转义。 &与字符串中的匹配。 在正则表达式中,一个。表示任何字符。 *表示前一个字符的“无”到“无限”。 所以这个正则表达式匹配(&)和(&fjalsdkfj)

  • 用右括号拆分字符串
string.slice(/\(&.*\)/).split(“)”=>[(&(a=1)”,“(c=11)”,“(p=c=11,o=m,d=4”]

  • 然后遍历结果数组
string.slice(/\(&.*\)/).split(“)”)。每个都不匹配

第4行:

  • 进行迭代并从中删除不需要的字符
match.tr(“(&“,”)

  • 使用第一个
    =
    符号将其拆分一次
match.tr(“(&“,”).split(“=”,2)

  • 使用2值数组作为散列上的键和值
match.tr(“(&“,”).split(“=”,2)。每个_片(2){键,值|散列[key]=value}

逐行: 第1行:设置变量string和起始字符串

string=“特殊过滤器,|过滤器”(&(a=1)(c=11)(p=c=11,o=m,d=4))”

第2行:设置一个变量hash,并填充一个空hash

hash={}

第3行:

  • 剪切与此regexp匹配的字符串部分
string.slice(/\(&.*\)/)=>“(&(a=1)(c=11)(p=c=11,o=m,d=4))”

regexp以正斜杠(/regexp转到此处/)结尾。 括号在正则表达式中有特殊含义,因此必须用反斜杠转义。 &与字符串中的匹配。 在正则表达式中,a.表示任何字符。 *表示前一个字符的“无”到“无限”。 所以这个正则表达式匹配(&)和(&fjalsdkfj)

  • 用右括号拆分字符串
string.slice(/\(&.*\)/).split(“)”=>[(&(a=1)”,“(c=11)”,“(p=c=11,o=m,d=4”]

  • 然后遍历结果数组
string.slice(/\(&.*\)/).split(“)”)。每个都不匹配

第4行:

  • 进行迭代并从中删除不需要的字符
match.tr(“(&“,”)

  • 使用第一个
    =
    符号将其拆分一次
match.tr(“(&“,”).split(“=”,2)

  • 使用2值数组作为散列上的键和值
match.tr(“(&“,”).split(“=”,2)。每个_片(2){键,值{散列[key]=value}

我尝试这样做

Hash[*string[/\&.*/].tr("&(","").split(")").map{|i| i.split("=",2)}.flatten]
从@Conner的解决方案中获得的一些想法;)

谢谢@corner,我知道了一些以前从未使用过的函数。

我尝试了一下

Hash[*string[/\&.*/].tr("&(","").split(")").map{|i| i.split("=",2)}.flatten]
从@Conner的解决方案中获得的一些想法;)


谢谢@corner我能知道一些我以前从未使用过的函数。

谢谢,还有一件事是字符串将根据条件而变化,如果我的字符串是“a=1”或“c=c=1,o=m,d=4”,那么我如何将其转换为哈希。我不确定你在问什么。我的字符串将是(a=1)或(c=c=1,o=m,d=4)我如何将其转换为类似{“a”=>“1”的哈希还有{“c”=>“c=1,o=m,d=4”}我刚刚给你写了一本书,解释了如何做。看最后一行并修改它。
string.tr(“()”,”).split(“=”,2)。每个片(2){| x,y | hash[x]=y}
谢谢,如果我的字符串是“a=1”或“c=1,o=m,d=4”,字符串将根据情况而有所不同我的字符串将是(a=1)或(c=c=1,o=m,d=4)我怎么能把它转换成像{“a=”>“1”}和{“c=”>“c=1,o=m,d=4”}这样的散列呢?我刚刚给你写了一本书,解释了怎么做。看最后一行并修改它。
string.tr(“,”)。split(“,”)。split(=”,2)。每片(2){x,y=x}