Проблема при вставке в массив внутри структуры

У меня проблема в следующем смарт-контракте.

Я определил структуру, которая включает в себя массив строк. И я определил сопоставление для этой структуры.

struct Stonedetails {

        uint stoneweight;
        string stoneimagehash;
        string stoneidbywholesaledealer;
        string[] stoneidsbycutter;


}

mapping (uint=>Stonedetails) public stonedetailsTable;

Я сохранил значения в структуре, используя следующие методы внутри функции, передав параметры.

 stonedetailsTable[stoneid].stoneweight =stoneweight;
 stonedetailsTable[stoneid].stoneimagehash =stoneimagehash;
 stonedetailsTable[stoneid].stoneidbywholesaledealer =stoneidbywholesaledealer;

Как я могу сохранить значения в массиве строк? Это способ хранить значения по одному?

stonedetailsTable[stoneid1].stoneidsbycutter.push(stoneidbycuttervalue);

Как найти длину массива с помощью stoneidsbycutter.length?

Я не уверен, что ваш вопрос. Код, которым вы поделились, не работает? Не stonedetailsTable[stoneid].stoneidsbycutter.lengthработает?
@smarx Я пытался найти длину, но он возвращает значение как «0» ... Верен ли способ вставки, который я использовал ??
Мне кажется, все в порядке. Можете ли вы поделиться полным кодом, демонстрирующим проблему? (Например, a pushс последующей проверкой length.)

Ответы (1)

Ваш код выглядит правильно. Я проверил следующее и получил длину 1, как и ожидалось:

pragma solidity ^0.4.17;

contract Test {
    struct Stonedetails {
        uint stoneweight;
        string stoneimagehash;
        string stoneidbywholesaledealer;
        string[] stoneidsbycutter;
    }

    mapping (uint=>Stonedetails) public stonedetailsTable;

    function Test() public {
        stonedetailsTable[0].stoneidsbycutter.push("hello");
    }

    function getLength() public constant returns (uint256) {
        return stonedetailsTable[0].stoneidsbycutter.length; // returns 1
    }
}
Это сработало успешно