【发布时间】: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 => a.Contains(c)).GroupBy(c => c).Select(g => g.Count()),其中a是第一个列表,b是第二个。 -
或者:
var result = (from item in a select b.Count(text => 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