首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Perl删除数组元素中的空格

Perl删除数组元素中的空格
EN

Stack Overflow用户
提问于 2020-04-27 14:11:15
回答 2查看 325关注 0票数 0

我有一个包含n个元素的数组。因此,每个元素可能会在开头或结尾有空格。所以我想一次删除空格。这是我的代码片段,它可以工作,也可以不工作(不工作的代码可以在元素的末尾修剪,但不能从元素的前端修剪)。

不工作:

代码语言:javascript
运行
AI代码解释
复制
....
use Data::Dumper;

my @a = ("String1", " String2 ", "String3 ");

print Dumper(\@a);

@a = map{ (s/\s*$//)&&$_}@a;

print Dumper(\@a);
...

工作中:

代码语言:javascript
运行
AI代码解释
复制
...
use Data::Dumper;

my @a = ("String1", " String2 ", "String3 ");

print Dumper(\@a);

my @b = trim_spaces(@a);

print Dumper(\@b);

sub trim_spaces
{
    my @strings = @_;
    s/\s+//g for @strings;
    return @strings;
}
...

不知道这两个有什么不同。

如果有更好的建议,请与我分享!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-27 14:16:49

您的“不工作示例”仅从字符串的一端删除空格。表达式s/^\s+|\s+$//g将删除两端的空格。

您可以通过使用/r标志返回修改后的副本来改进代码:

代码语言:javascript
运行
AI代码解释
复制
@a = map { s/^\s+|\s+$//gr } @a;

或者,如果您必须执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
@a = map { s/^\s+|\s+$//g; $_ } @a;
票数 6
EN

Stack Overflow用户

发布于 2020-04-27 14:26:31

这个块有两个问题:

代码语言:javascript
运行
AI代码解释
复制
{ (s/\s*$//)&& $_ }

一个微不足道的问题是,它只删除了尾随空格,而不是前导,您说过您也想删除它。

更隐蔽的问题是对&&的误导使用。如果s///中的正则表达式没有找到匹配项,它将在&&的左侧返回undef;这意味着不会执行右侧的值,而undef将成为整个块的值。这意味着正则表达式不匹配的任何字符串都将被删除,并替换为map返回的结果数组中的undef,这可能不是您想要的结果。

这实际上不会发生在您编写的正则表达式中,因为每个字符串都与\s*匹配,并且s///仍然返回true,即使它实际上没有修改字符串。但这取决于正则表达式和一个不好的假设。

更广泛地说,您的方法混合并匹配了两种不兼容的数据修改方法:就地变异(s///)和应用了某些更改的创建副本(map)。

map函数旨在创建一个新数组,该数组的元素以某种方式基于输入数组;理想情况下,它不应在此过程中修改原始数组。但是您的代码需要这样做-即使您没有将map的结果分配回@as///也会就地修改@a中的字符串。实际上,您可以从代码中删除@a =并获得相同的结果。这不被认为是良好的实践;map应该用于其返回值,而不是副作用。

如果您想就地修改数组的元素,那么您的for解决方案实际上是可行的。它清楚地表明了你在做什么,副作用也是可以的。

如果您希望保留原始数组并应用更改创建一个新数组,则应在替换项上使用/r标志,这会使它们返回结果字符串,而不是原地修改原始数组:

代码语言:javascript
运行
AI代码解释
复制
my @b = map { s/^\s+|\s+$//gr } @a;

这将使@a保持原样,并使用修剪后的字符串创建一个新的数组@b

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61460830

复制
相关文章
React高阶组件HOC的使用
高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。 高阶组件只提供逻辑代码 视图代码会做为参数传递给高阶组件进行渲染
明知山
2021/10/25
9990
React高阶组件HOC的使用
如何将Redux与React Hooks一起使用
React Redux在2019年6月11日发布的7.1版中提供了对Hooks的支持。这意味着我们可以在函数组件中将Redux与Hooks一起使用,而不是使用高阶组件(HOC)。
前端知否
2020/03/23
7.1K0
如何将Redux与React Hooks一起使用
React 高阶HOC (一)
高阶组件 (HOC) 是 React 中用于重用组件逻辑的高级技术。HOC 本身并不是 React API 的一部分。它们是从 React 的组合性质中出现的一种模式。
ronixiao
2022/08/08
8490
React 高阶HOC (一)
React 高阶组件HOC
概述 高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧,通俗的讲,高阶组件就是一个 React 组件包裹着另外一个 React 组件。它本身并不是 React 的 API,而是一种 React 组件设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 react-redux。 高级组件使用函数来实现,基本上是一个类工厂,它的函数签名可以用类似 haskell 的伪代码表示: hocFactory:: W: React.Com
xiangzhihong
2018/02/06
1.7K0
React系列-Mixin、HOC、Render Props
在讲react-hooks之前,我们来捋捋react状态逻辑复用相关知识点,这会帮助你理解hooks
落落落洛克
2021/01/08
2.4K0
React系列-Mixin、HOC、Render Props
「react进阶」一文吃透React高阶组件(HOC)
React高阶组件(HOC),对于很多react开发者来说并不陌生,它是灵活使用react组件的一种技巧,高阶组件本身不是组件,它是一个参数为组件,返回值也是一个组件的函数。高阶作用用于强化组件,复用逻辑,提升渲染性能等作用。高阶组件也并不是很难理解,其实接触过后还是蛮简单的,接下来我将按照,高阶组件理解?,高阶组件具体怎么使用?应用场景, 高阶组件实践(源码级别) 为突破口,带大家详细了解一下高阶组件。本文篇幅比较长,建议收藏观看
用户6835371
2021/06/01
2.2K0
「react进阶」一文吃透React高阶组件(HOC)
React篇(048)-什么是高阶组件(HOC)?
高阶组件(HOC) 就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件,它只是一种模式,这种模式是由react自身的组合性质必然产生的。
齐丶先丶森
2022/05/12
4820
应用connected-react-router和redux-thunk打通react路由孤立
在我们开发过程中,很多时候,我们需要让组件共享某些数据,虽然可以通过组件传递数据实现数据共享,但是如果组件之间不是父子关系的话,数据传递是非常麻烦的,而且容易让代码的可读性降低,这时候我们就需要一个 state(状态)管理工具。常见的状态管理工具有 redux,mobx,这里选择 redux 进行状态管理。值得注意的是 React 16.3 带来了全新的Context API,我们也可以使用新的 Context API 做状态管理。Redux 是负责组织 state 的工具,但你也要考虑它是否适合你的情况。
Run丘比特
2020/11/19
2.4K0
应用connected-react-router和redux-thunk打通react路由孤立
【React深入】从Mixin到HOC再到Hook(原创)
前端发展速度非常之快,页面和组件变得越来越复杂,如何更好的实现 状态逻辑复用一直都是应用程序中重要的一部分,这直接关系着应用程序的质量以及维护的难易程度。
ConardLi
2019/05/23
1.8K0
slim.fully_connected()
def fully_connected(inputs, num_outputs, activation_fn=nn.relu, normalizer_fn=None, normalizer_params=None, weights_initializer=initializers.xavier_initializer()
狼啸风云
2019/08/29
3.8K0
Ansible Ad-Hoc与常用模块
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
踏歌行
2020/10/15
1.7K0
Ansible Ad-Hoc与常用模块
如何将CocoaPods与多个Framework子项目一起使用
假设主项目是MAIN_APP,两个子项目是FRAMEWORK_A和FRAMEWORK_B。
freesan44
2019/10/12
4.2K0
精读 React 高阶组件
高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧。它本身并不是 React 的 API,而是一种 React 组件的设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 react-redux。
前端迷
2019/08/09
9870
精读 React 高阶组件
React组件复用的方式
现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护、可复用的代码就变得尤为重要,在React中组件是代码复用的主要单元,基于组合的组件复用机制相当优雅,而对于更细粒度的逻辑(状态逻辑、行为逻辑等),复用起来却不那么容易,很难把状态逻辑拆出来作为一个可复用的函数或组件,实际上在Hooks出现之前,都缺少一种简单直接的组件行为扩展方式,对于Mixin、HOC、Render Props都算是在既有(组件机制的)游戏规则下探索出来的上层模式,一直没有从根源上很好地解决组件间逻辑复用的问题,直到Hooks登上舞台,下面我们就来介绍一下Mixin、HOC、Render Props、Hooks四种组件间复用的方式。
WindRunnerMax
2021/02/25
2.9K0
12. 精读《React 高阶组件》
本期精读文章是:React Higher Order Components in depth
黄子毅
2022/03/14
5100
12. 精读《React 高阶组件》
React组件复用的发展史
React MiXin只能通过React.createClass()来使用,如下:
夏天的味道123
2022/10/03
1.4K0
React的组件复用的发展史
React MiXin只能通过React.createClass()来使用,如下:
夏天的味道123
2022/12/07
1.6K0
React中的高阶组件
高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合特性而形成的设计模式。
WindRunnerMax
2021/01/18
3.9K0
SQL Server Ad Hoc Distributed Queries开启与关闭
文章时间:2020年3月23日 14:58:27 解决问题:Ad Hoc Distributed Queries的启用与关闭 直接复制下面的命令进行执行即可。 启用Ad Hoc Distributed Queries exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure 关闭Ad Hoc Distributed Queries
华创信息技术
2020/03/25
8290
【19】进大厂必须掌握的面试题-50个React面试
这是最有可能由面试官提出的 常被问到的50个React面试问答。为了方便您访问,我对React面试问题进行了归类:
全栈程序员站长
2021/04/07
11.5K0

相似问题

如何将HoC与React Native一起使用

116

将TypeScript与React HOC、React.lazy和forwarRef一起使用

135

将Apollo GraphQL HOC模式与现有的HOC一起使用

11

将redux与不带connect HOC的react-hooks一起使用

127

使用HOC的React路由器渲染方法

118
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档