我有一个包含一些字符串的主数组。对于主数组的每个值,我想检查子数组中出现的字符串和次数。例如,我有以下数组:
主要输入
mainArray = {A, B, C, P}
Subarrays
arrayA = {a,c,d,m,o}
arrayB = {b,c,p,q,r}
arrayC = {a,p,q,r,t,e,o}
……………………………
……………………………
arrayN = {a,c,p,n,o}
现在我想检查A,B,C和P在哪里出现以及出现多少次。它应该生成以下输出:
resultArray = {{a,b,0}{a,c,2}{a,p,1}{b,c,0}{b,p,0}{c,p,2}}
最后一步是,每个主阵列字符串出现在子阵列中的次数:
最终输出
lastArray = A=3,B=0,C=4,P=3
我会有数千个主阵列和数千个子阵列。因此,性能也是一个问题:(
答案 0 :(得分:0)
我使用guava库multiset
答案 1 :(得分:0)
让我们继续使用标准Java。将问题分解为步骤。
List<String[]>
的新名称。我不知道你的目的,所以我可以在拓扑中打开封面的想法之后调用此列表partitions
或cover
。我们来使用分区。Set<String>
,以便您可以使用Java Collections框架。您最终会得到List<Set<String>>
。List
更好地工作的原因。使用Set<Set<String>>
,并将其命名为pairs
Map<Set<String>, Integer>
的新pairCounts
中。resultSet
在这里没有多大意义; {a, b, 0}
会是什么数据结构?只需编写一种格式pairCounts
供人类消费的方法。candidateStrings
和partitions
进行迭代,以计算您的lastSet
,该Map<String, Integer>
实际上应该是名为counts
的{{1}}。counts
。现在,这可能很慢。它会工作。您可以为每个步骤编写测试。一旦你编写了正确的代码,就要担心速度。