【问题标题】:Get indices of string occurrences in cell-array获取元胞数组中字符串出现的索引
【发布时间】:2015-04-07 22:27:28
【问题描述】:

我有一个包含一长串字符串的元胞数组。大多数字符串都是重复的。我需要元胞数组中字符串实例的索引。

我尝试了以下方法:

[bool,ind] = ismember(string,var);

当元胞数组中的内容与string匹配的索引明显不止一个时,它始终返回标量ind。

如何获得指向包含string 的元胞数组中位置的索引列表?

【问题讨论】:

  • var 是元胞数组吗?然后,使用ismember(var,string)。
  • 好的,然后通过 find 传递它就可以了。谢谢!

标签: arrays string matlab cell-array


【解决方案1】:

作为 Divakar 评论的替代方案,您可以使用 strcmp。即使某些单元格不包含字符串,这也有效:

>> strcmp('aaa', {'aaa', 'bb', 'aaa', 'c', 25, [1 2 3]})
ans =
     1     0     1     0     0     0

【讨论】:

    【解决方案2】:

    或者,您可以标识每个字符串,因此具有与输入元胞数组和字符串相对应的代表性数值数组。对于IDing,您可以使用unique,然后使用find,就像使用数值数组一样。以下是实现这一目标的方法 -

    var_ext = [var string]
    [~,~,idx] = unique(var_ext)
    out = find(idx(1:end-1)==idx(end))
    

    代码分解:

    • var_ext = [var string]:将所有内容(字符串和 var)连接到一个元胞数组中,字符串在其末尾(最后一个元素)结束。

    • [~,~,idx] = unique(var_ext):标识该串联元胞数组中的所有内容。

    • find(idx(1:end-1)==idx(end)):idx(1:end-1) 表示元胞数组元素的数字 ID,idx(end) 将是 string 的 ID。比较这些 ID 并使用 find 来获取匹配的索引,从而为我们提供最终输出。


    示例运行 -

    输入:

    var = {'er','meh','nop','meh','ya','meh'}
    string = 'meh'
    

    输出:

    out =
         2
         4
         6
    

    【讨论】:

      【解决方案3】:

      regexp 会更好、更简单地解决这个问题。

      string  = ['my' 'bat' 'my' 'ball' 'my' 'score']
      expression = ['my']
      
      regexp(string,expresssion)
      ans = 1 6 12
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 2017-04-14
        • 2023-03-11
        • 2015-08-15
        • 2017-07-28
        • 2012-03-14
        相关资源
        最近更新 更多