Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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
Arrays 映射数组而不丢失未更改的元素_Arrays_Ruby - Fatal编程技术网

Arrays 映射数组而不丢失未更改的元素

Arrays 映射数组而不丢失未更改的元素,arrays,ruby,Arrays,Ruby,我拆分了以下字符串: str = "0001110010101000011111100001110010000010000000011101011100001" 进入分组的“0”和“1”的数组中: 我想用字符“”替换包含字符“1”且长度小于3个字符的元素,但保留其他元素 我在代码中达到了这一点: str_arr.map!{|x| if x.include?("1") && x.length < 3; x = "." end} str_arr # => [nil,

我拆分了以下字符串:

str = "0001110010101000011111100001110010000010000000011101011100001"
进入分组的
“0”和
“1”的数组中:

我想用字符
”替换包含字符
“1”
且长度小于3个字符的元素,但保留其他元素

我在代码中达到了这一点:

str_arr.map!{|x| if x.include?("1") && x.length < 3; x = "." end}

str_arr # => [nil, nil, nil, ".", nil, ".", nil, ".", nil, nil, nil, nil, nil, ".", nil, ".", nil, nil, nil, ".", nil, nil, nil, "."]
stru arr.map!{x |如果x.include?(“1”)和&x.length<3;x=“.”end}
str_arr=>[nil,nil,nil,”,nil,”,nil,“,nil,nil,nil,nil,”,nil,“,nil,”,nil,“,nil,nil,”,nil,“,nil,nil,”]
最后一步是我绊倒的地方。我将想要的元素转换为
,但将其余元素转换为
nil


有没有一种方法可以在不影响其余元素的情况下替换我要更改的元素?

转换这些元素的原因是,如果ruby return
nil
中的
if
语句不满足以下条件:

if false; end # => nil
要解决此问题,只需使用三元运算符(
?:
)代替
if then end
,并提供原始值作为替代:

str_arr.map!{ |x| x.include?('1') && x.length < 3 ? '.' : x }

在这种情况下,使用每个索引将是合适的

str_arr.each_index{|i| str_arr[i] = "." if str_arr[i] =~ /\A1{,2}\z/}
# => ["000", "111", "00", ".", "0", ".", "0", ".", "0000", "111111", "0000", "111",
#    "00", ".", "00000", ".", "00000000", "111", "0", ".", "0", "111", "0000", "."]

在写下你的尝试之前,请写下你正在尝试做的事情。它是混淆的。不要使用像“在这种情况下”,“在其他例子中”这样的词。这令人困惑。你问的是哪种情况?我应该说“在这个例子中”。在那句话之前,我说了我想实现的目标,然后把它说得更具体一些,这样你就知道我想在代码中做什么了。我觉得很清楚!如果有更好的解释方法,请告诉我,这样我以后就不会有人否决我提出的每个问题。谁接受了@smartrahat的编辑?这是完全错误的。好吧,我对这个和诵读困难症还不熟悉,所以我解释事情的句子结构非常“有趣”,我猜这对我来说将是一条艰难的道路,但我想为堆栈溢出社区做出贡献,而不是混淆它。太棒了!我甚至没有想过让它在三元运算符的末尾返回元素本身。非常感谢。
0+|1+
str_arr.each_index{|i| str_arr[i] = "." if str_arr[i] =~ /\A1{,2}\z/}
# => ["000", "111", "00", ".", "0", ".", "0", ".", "0000", "111111", "0000", "111",
#    "00", ".", "00000", ".", "00000000", "111", "0", ".", "0", "111", "0000", "."]