c# - 将 Python 数组转换为 C# 并返回值

标签 c# python arrays grasshopper rhino3d

我正在将 Python 脚本转换为 C#,我需要一些帮助。我真的没有任何 Python 经验。这些类型的数组对我来说是全新的。

倒数第二行 var posVec = dSorted[0][1]; 以及最后一行:return posVec;.

var posVec 的实际变量类型是什么?

我还试图返回 posVec,它应该是一个 Vector3d,但我收到了这个错误:

Cannot implicitly convert type 'double' to 'Rhino.Geometry.Vector3d'

我做错了什么? 谢谢!

python :

posVec = dSorted[0][1]
return posVec

完整的 Python 方法:

def getDirection(self):
    #find a new vector that is at a 90 degree angle

    #define dictionary
    d = {}
    #create an list of possible 90 degree vectors
    arrPts = [(1,0,0), (-1,0,0), (0,1,0), (0,-1,0)]
    vec = self.vec
    vec = rs.VectorUnitize(vec)

    #find the distance between the self vec
    #position and one of the 4 90 degree vectors
    #create a dictionary that matches the distance with the 90 degree vector
    for i in range(4):
        dist = rs.Distance(vec, arrPts[i])
        d[dist] = arrPts[i]
    #sort the dictionary.  This function converts it to an array
    #sort by the distances, "value"/item 0
    dSorted = sorted(d.items(), key=lambda value: value[0])

    #select the second item in the array which is one of the 90 degree vectors
    posVec = dSorted[0][1]
    return posVec

到目前为止我重写的完整 C# 方法:

    // find a new vector that is at a 90 degree angle
    public Vector3d GetDirection()
    {
        // define dictionary
        Dictionary<double, Vector3d> d = new Dictionary<double, Vector3d>();

        Vector3d[] arrPts = new Vector3d[] {
            new Vector3d(1, 0, 0),
            new Vector3d(-1, 0, 0),
            new Vector3d(0, 1, 0),
            new Vector3d(0, -1, 0),
            new Vector3d(0, 0, 1),
            new Vector3d(0, 0, -1) };

        _vec = Vec;
        _vec.Unitize();

        // find the distance between the self vec position and one of the 6 90 degree vectors
        // create a dictionary that matches the distance with the 90 degree vector

        for (int i = 0; i < arrPts.Length; i++)
        {
            double dist = Math.Sqrt(
                ((_vec.X - arrPts[i].X) * (_vec.X - arrPts[i].X)) +
                ((_vec.Y - arrPts[i].Y) * (_vec.Y - arrPts[i].Y)) +
                ((_vec.Z - arrPts[i].Z) * (_vec.Z - arrPts[i].Z)));

            d.Add(dist, arrPts[i]);
        }

        Vector3d[] dSorted = d.Values.ToArray();
        var posVec = dSorted[0][1];
        return posVec;
    }

最佳答案

我参加聚会迟到了,但不管怎样,如果它在未来为某人服务......

您正在根据 dictionary(d) 的值创建一个 Vector3d(dSorted) 数组,但您尝试将其转换为 var posVec 应该是使用 dSorted[0][1]Vector3d。这是锯齿状数组的表示法,但您将 dSorted 声明为 Vector3d 的数组。

因此,要访问其中一项,只需使用 dSorted[0]

关于c# - 将 Python 数组转换为 C# 并返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107596/

相关文章:

java - Android.view.View错误

C# 字典 ValueOrNull/ValueorDefault

c# - 从 Service Fabric 内部关闭 StatelessService 实例的最佳实践

c# - 获取验证结果

python - 存储字典值的路径

arrays - React Native - 使用带有 FlatList 的 keyExtractor

c# - 如何将数字格式化为带前导零的字符串?

python - 在 Excel Python XLWT 中保留公式

python - Python REST API 的最佳 gunicorn-worker 配置(数量和类)

arrays - 如何在 Python 3 中转置数组?