This is a function that returns an array of addresses that confirmed for a transactionId.
mapping (uint => Transaction) public transactions;
mapping (uint => mapping (address => bool)) public confirmations;
address[] public ownersArr;
/// @dev Returns array with owner addresses, which confirmed transaction.
/// @param transactionId Transaction ID.
/// @return Returns array of owner addresses.
function getConfirmations(uint transactionId)
public
view
returns (address[] _confirmations)
{
address[] memory confirmationsTemp = new address[](ownersArr.length);
uint count = 0;
uint i;
for (i=0; i<ownersArr.length; i++)
if (confirmations[transactionId][ownersArr[i]]) {
confirmationsTemp[count] = ownersArr[i];
count += 1;
}
_confirmations = new address[](count);
for (i=0; i<count; i++)
_confirmations[i] = confirmationsTemp[i];
}
I could understand whats the point of running two loops inside this function when only one loop is sufficient to get all the addresses that confirmed for a transactioId.
function getConfirmations(uint _transactionId) public view returns (address[] _confirmations)
{
for (uint i=0; i < ownersArr.length; i++){
if (confirmations[_transactionId][ownersArr[i]]){
_confirmations.push(ownersArr[i]);
}
}
}