【问题标题】:Count instances of first array in second array and return third array计算第二个数组中第一个数组的实例并返回第三个数组
【发布时间】:2013-05-12 18:17:32
【问题描述】:

我有两个字符串数组,但出于演示目的,我将使用字母 a-e:

{a,b,c,d,e}

{a,a,b,c,c,c,d,e,e}

我想将第一个数组中每个元素的实例计数为第二个数组中的元素,并返回计数的第三个数组(具有第一个数组的长度)。

例如,给定上面的两个数组,我的程序应该返回:

{2,1,3,1,2}

或者,获取第二个数组的方法:

{a,a,b,c,c,c,d,e,e}

然后返回:

{a,b,c,d,e}

{2,1,3,1,2}

也将服务于我的程序的目的。

我知道在 JavaScript 中我可以做到这一点:

function foo(arr) {
    var a = [], b = [], prev;

    arr.sort();
    for ( var i = 0; i < arr.length; i++ ) {
        if ( arr[i] !== prev ) {
            a.push(arr[i]);
            b.push(1);
        } else {
            b[b.length-1]++;
        }
        prev = arr[i];
    }

    return [a, b];
}

我将如何在 Visual Basic 中执行此操作?

【问题讨论】:

  • 在 C# 中,使用 LINQ:b.Where(c =&gt; a.Contains(c)).GroupBy(c =&gt; c).Select(g =&gt; g.Count()),其中a 是第一个列表,b 是第二个。
  • 或者:var result = (from item in a select b.Count(text =&gt; text == item)).ToArray();(但那是 C#,不知道它在 VB 中的样子)
  • @MatthewWatson - 什么是零?但是,是的,过滤掉就可以了。
  • @Oded:我的意思是,如果你用{a,X,c,d,e} /{a,a,b,c,c,c,d,e,e} 运行它,它会在它应该输出2,0,3,1,2 时输出2,3,1,2
  • @Oded:好吧,OP 确实说过结果数组的长度应该与a 的长度相同;但是阅读他的规范的替代部分,看起来永远不会有任何丢失的字符串,因为他是从第二个数组派生出第一个数组。因此,如果是这样的话,您的建议将始终有效。

标签: arrays vb.net visual-studio-2010 count


【解决方案1】:

我会这样做(直截了当):

Dim strings() As String = {"a","b","c","d","e"}
Dim stringsToCheck() As String = {"a","a","b","c","c","c","d","e","e"}
Dim results(strings.length) as Integer

For Each strToCheck as String in stringsToCheck
   For Each str As String in strings
      If strToCheck.Equals(str) Then
         results(strings.IndexOf(str)) += 1
         Exit For
      End If
   Next
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2012-03-31
    • 2022-11-12
    • 1970-01-01
    • 2019-04-10
    • 2017-09-08
    • 1970-01-01
    相关资源
    最近更新 更多