Я понятия не имею о java, но я нашел это руководство по блокчейну в java, и я пытался понять и преобразовать код в C++ (мое дело). До сих пор у меня все было хорошо, но я застрял здесь. Я не могу понять это для цикла и Map.Entry<>. Любая помощь приветствуется.
А еще я новичок в блокчейне. Ссылка на это руководство: https://medium.com/programmers-blockchain/creating-your-first-blockchain-with-java-part-2-transactions-2cdac335e0ce
Если это поможет.
Вот код:
public class Wallet {
public PrivateKey privateKey;
public PublicKey publicKey;
public HashMap<String,TransactionOutput> UTXOs = new HashMap<String,TransactionOutput>();
public float getBalance() {
float total = 0;
for (Map.Entry<String, TransactionOutput> item: NoobChain.UTXOs.entrySet()){
TransactionOutput UTXO = item.getValue();
if (UTXO.isMine(publicKey)) { //if output belongs to me ( if coins belong to me )
UTXOs.put(UTXO.id,UTXO); //add it to our list of unspent transactions.
total += UTXO.value ;
}
}
return total;
}
Что это за цикл делает, я не понимаю. Если бы кто-нибудь мог предоставить более простую версию этого цикла на С++.
Внутренняя карта java имеет записи. В вашем случае вы перебираете набор записей.
Вы понимаете синтаксис for (std::map<string, transaction_output>::value_type item : NoobChain.UTXOs) { ... } (обратите внимание, что есть гораздо лучшие способы написать это на C++, это просто закрывающий)?
Это просто пара ключ-значение. Для каждой пары ключ-значение в NoobChain.UTXOs, если транзакция принадлежит мне, добавьте ее в список UTXO этого кошелька и увеличьте общую сумму.
Запись представляет собой пару ключ/значение. Вы можете найти это проще и быстрее в Интернете. Другие используемые концепции (циклы и условия) существуют в C++.




Вместо того, чтобы просто предоставить фрагмент кода C++, позвольте мне попытаться объяснить это: В java есть структуры данных, называемые картами, которые содержат пары ключ-значение (вы, наверное, догадались об этой части). Сама карта не является итерируемой, поэтому для циклического просмотра карты вы можете перебрать все ее ключи (также называемые набором ключей), все значения или все пары ключ-значение (также известные как набор записей). Последнее происходит в вашем примере. Итак, в вашем примере у вас есть карта объектов String (ключи) и TransactionOutput (значения). for, перебирает эти пары, и каждая пара сохраняется в элементе переменной. Затем часть значения извлекается из пары ключ-значение (элемент), которая является объектом TransactionOutput. Затем этот объект проверяется с помощью метода isMine(), и если это верно, он добавляется в другую карту (вызывает UTXO), которая сопоставляет строки (ключ) с объектом TransactionOutput. В этом случае кажется, что строка (ключ на карте) является идентификатором TransactionObject. Сумма переменной увеличивается на значение добавленного TrasactionOutput.
Примечание: этот цикл for может просто перебирать все значения на карте, поскольку ключ никогда не используется в этом конкретном цикле.
Теперь, чтобы объяснить это другими словами, он проходит через карту TransactionOutputs, те, которые принадлежат «мне», откладываются в отдельную карту, и возвращается общее количество значений TrasactionOutput, которые принадлежат «мне».
Надеюсь, это прояснит ситуацию! Удачи, Тео
эй, большое спасибо, брат .. мог бы также сказать мне, что делает эта функция entrySet ()?
Эй, нет проблем, рад помочь. Если вы найдете ответ полезным, не забудьте проголосовать. entrySet() возвращает набор (набор без повторяющихся элементов) пар ключ-значение из карты.docs.oracle.com/javase/8/docs/api/java/util/Map.html#entrySet--
C++ имеет шаблоны, которые характеризуются синтаксисом
Type<AnotherType>и foreach (for (Type variable : anotherVariable)). Так что непонятно, чего вы не понимаете в этом.