以下にコードが表示されていますが、正常に機能しています。しかし、これを実装する他の方法があるかどうか疑問に思いましたか?基本的に、私が4つのループで行っているのは、SeqGenerateのString / Elementを使用して一致が見つかった場合に、配列リスト内のリンクされたハッシュマップであるCopyMatrixのキーに新しい値を比較して割り当てることです。私はループでもある別の解決策を持っていましたが、それは機能していなかったので、これで立ち往生していて、より少ないループまたはおそらく他のいくつかの技術でこれを行う他の方法があるかどうか疑問に思っています。
ArrayList<ArrayList<String>> SeqGenerate = new ArrayList<ArrayList<String>>();
ArrayList<LinkedHashMap<String, Double>> copyOfMatrix = new ArrayList<LinkedHashMap<String, DOuble>>();
ArrayList<LinkedHashMap<String, Double>> calcLogProb = new ArrayList<LinkedHashMap<String, DOuble>>();
for (ArrayList<String> getArray: SeqGenerate){
LinkedHashMap<String, Double> tempVal = new LinkedHashMap<String, Double>();
for (String getString: getArray){
for (LinkedHashMap<String, Double> entries: copyOfMatrix){
Iterator <String> iterKey = entries.keySet().iterator();
Iterator <Double> iterVal = entries.values().iterator();
while (iterKey.hasNext()){
String keyVal = iterKey.next();
Double Value = iterVal.next();
if (getString.equals(keyVal)){
Double temp = Value;
if (temp==0){
temp=0.00000001;
}
Double seqVal = Math.abs(Math.log10(temp));
tempVal.put(keyVal, seqVal);
}
}
}
}
calcLogProb.add(tempVal);
}
編集
SeqGenerateにはこの要素が含まれています
ArrayList--------String
(1)Hello World = {He el ll lo o_ _W Wo or rl ld}
(2)Hello Earth = {He el ll lo o_ _E Ea ar rt th}
HelloWorldとHelloEarthは、SeqGenerateに含まれるテキストの種類の例ですが、私が説明したように、これらは2文字のシーケンスとして格納されます。copyOfMatrixには同じ種類のシーケンスが含まれていますが、別の文とテキストのセットから生成しましたが、一致するものが見つかった場合に値を比較して置き換える2文字のシーケンスです。
したがって、ネストされたループ内の要素を比較する方法を知っているのは、forループを作成することだけです。たとえば、seqGenerate要素0の要素1を、コピー行列に格納されているキーと比較します。一致するものが見つかった場合は、値を置き換えます。これが十分に明確であることを願っています。
御時間ありがとうございます!