首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Grasshopper 3D中使用数组/列表和C#组件

在Grasshopper 3D中使用数组/列表和C#组件
EN

Stack Overflow用户
提问于 2013-11-14 00:04:25
回答 1查看 4K关注 0票数 0

草莓3D的新用户在这里,我需要一些C#的语法帮助在草履虫3D编码。例如,我有一个脚本,粘贴在下面:

代码语言:javascript
复制
public static int arraySum(int[] myArray){
    int someValue = 0;
    for(int i = 0; i < myArray.Length; i++){
       someValue += myArray[i];
    }
    return someValue;
}

上面的静态方法对数组的所有值求和。

根据我对Grasshopper中C#脚本组件的理解,您不能创建静态方法,因为所有方法都是不返回的空方法。您将一个变量(输出)指定为psuedo-return,对吗?

了解这一点--例如,我如何将上面的脚本实现到一个C#组件?

我只是简单地指定了一个变量,例如,A作为和,而不是"return“。但我在那里遇到了一些问题,例如,像.Length这样的一些C#方法不起作用。

Grasshopper 3D的C#组件中方法的格式如下:

代码语言:javascript
复制
private void RunScript(int x, ref object A){
}
EN

回答 1

Stack Overflow用户

发布于 2015-06-11 00:35:55

这是一个相当老的问题,但为了完成,我将继续完成它。在任何GH脚本组件中,都有两个区域来编写代码。在该图中,您可以看到私有方法RunScript// <Custom Additional Code>中的另一个区域

因此,我可以在RunScript方法中编写如下代码:

代码语言:javascript
复制
 private void RunScript(List<int> myArray, ref object A)
 {

    int someValue = 0;
    for(int i = 0; i < myArray.Count; i++){
      someValue += myArray[i];
    }

    A = someValue;

 }

请注意,我将myArray重新定义为一个int类型的列表,如脚本组件输入中所示:

因为它是一个列表,所以我在循环中使用了myArray.Count。最后,我使用A = someValue在组件的输出中获得结果。

我还可以在// <Custom additional code>区域中编写方法,如下所示:

代码语言:javascript
复制
  private void RunScript(List<int> myArray, ref object A)
  {

    A = arraySum(myArray.ToArray());

  }

  // <Custom additional code> 

  public static int arraySum(int[] myArray){
    int someValue = 0;
    for(int i = 0; i < myArray.Length; i++){
      someValue += myArray[i];
    }
    return someValue;
  }

  // </Custom additional code>

它看起来像这样:

我更改了传入的myArray.ToArray(),因为它是作为组件的列表传入的。在第二种方式中,您的原始代码几乎是相同的。

希望这能帮助回答一个老问题!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19958584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档