Ruby:从字符串数组的每个元素中获取字符[n],严格使用数组表示法


CC-f
2025-03-17 08:38:27 (22天前)


假设我有这个:

x =%w(更大的黄色带状)
我希望得到每个字符串的特定字母作为字符串。当然,我可以这样做(获得第一个字母):

x.map {| w | …

3 条回复
  1. 0# 12345 | 2019-08-31 10-32



    如果您将单词组合在一个以空格分隔的字符串中,这是一种花哨的正则表达方式:




    1. string = greater yellow bandicooot
      string.gsub /([^ ])[^ ] /, \1

    2. => gyb

      </code>


    正则表达式的解释:





    • ([^ ])

      :match group - 单个非空格char



    • [^ ]

      :非空间字符的可选序列,后跟任何可选的空间字符序列。



    你可以在这里阅读:

    Ruby正则表达式 - gsub只捕获组

    ,使用时

    gsub

    无论是否在匹配组中,都会替换整个正则表达式中的所有内容。所以你需要使用特殊变量

    \1

    在里面

    gsub

    call(必须在单引号字符串中),以引用要用作输出的第一个匹配组。


  2. 1# Frui tenebris、 | 2019-08-31 10-32




    如果您不能使用数组表示法,那么使用map和join是否有更好的方法




    好吧,简短(和错误的:))答案是“这是不可能的” - 要获得一个数组中每个字符串的每个第n个字符,你显然必须迭代(是的,regexp也是迭代 - 最有可能性能不如数组迭代)。



    但是让我们假设你有一个真正的应用程序,你应该经常执行这个操作,字符串列表是巨大的(所以迭代是痛苦的)。另一方面,字符串列表很少更改,您几乎不需要返回原始字符串。



    在这种情况下,您可以借用列存储背后的想法,并将原始数组转换为类似的内容




    transposedx = [“gyb”, “rea”, “eln”, “ald”, “toi”, “ewc”, “r_o”, “o”, “o”, “__t”]



    其中每个第n个元素只是每个原始字符串的第n个字符串联(为了清楚起见,我将
    替换为“缺少”字符)。使用此数据模型,您只需使用数组表示法执行原始任务1),并在O(1)中执行2)。作为一个明显的权衡,您将不得不迭代每个其他操作(获取原始字符串,添加/删除/更新等)…


登录 后才能参与评论