C# Python(到C)方法转换

C# Python(到C)方法转换,c#,python,arrays,C#,Python,Arrays,我试图用C语言重现这个函数: def sendData(self, eventCodes, data = None): if data: self.push('\x01'.join(map(str, [eventCodes] + data)) + "\x00") else: self.push(eventCodes + "\x00") 我相信eventCodes是一个字符串,数据是一个数组。但我不明白map在这里是如何工作的。我认为它会在整个数组

我试图用C语言重现这个函数:

def sendData(self, eventCodes, data = None):
    if data:
        self.push('\x01'.join(map(str, [eventCodes] + data)) + "\x00")
    else:
        self.push(eventCodes + "\x00")
我相信eventCodes是一个字符串,数据是一个数组。但我不明白map在这里是如何工作的。我认为它会在整个数组中迭代,在本例中为每个项执行一个函数。但是,我不知道[eventCodes]+数据是如何成为一个数组的

我对获取此过程'\x01'.joinmapstr,[eventCodes]+data+\x00的结果感兴趣

分段:

str=>x=>x.ToString [项目]=>new[]{item} arr1+arr2=> mapf,iterable=> a、 joinb=> 分段:

str=>x=>x.ToString [项目]=>new[]{item} arr1+arr2=> mapf,iterable=> a、 joinb=> mapx,y将类似于此C代码:

y.Select(item => x(item))
所以这个:mapstr,[eventCodes]+数据类似于:

([eventCodes] + data).Select(item => str(item))`
 ^-----------------^                 ^-^
突出显示的部分还不是有效的C代码。str是什么,我们可以用ToString来代替它:

[eventCodes]+数据将包含单个字符串eventCodes的列表与数据中的字符串集合连接起来,因此我们有:

new[] { eventCodes }.Concat(data).Select(item => item.ToString())
走出一步,这是:

`\x01`.join(...)
在C中:

string.Join("\x01", ...)
那么我们得到这个:

string.Join("\x01", new[] { eventCodes }.Concat(data)
    .Select(item => item.ToString()))
最后方法:

public void sendData(string eventCodes, IEnumerable<string> data = null)
{
    if (data != null)
        push(string.Join("\x01", new[] { eventCodes }
            .Concat(data.Select(item => item.ToString()))) + "\x00");
    else
        push(eventCodes + "\x00");
}
就我个人而言,我将更改代码如下:

public void sendData(string eventCodes, IEnumerable<string> data = null)
{
    string element;
    if (data != null)
        element = string.Join("\x01", new[] { eventCodes }
            .Concat(data.Select(item => item.ToString())))
    else
        element = eventCodes;
    push(element + "\x00");
}
mapx,y将类似于此C代码:

y.Select(item => x(item))
所以这个:mapstr,[eventCodes]+数据类似于:

([eventCodes] + data).Select(item => str(item))`
 ^-----------------^                 ^-^
突出显示的部分还不是有效的C代码。str是什么,我们可以用ToString来代替它:

[eventCodes]+数据将包含单个字符串eventCodes的列表与数据中的字符串集合连接起来,因此我们有:

new[] { eventCodes }.Concat(data).Select(item => item.ToString())
走出一步,这是:

`\x01`.join(...)
在C中:

string.Join("\x01", ...)
那么我们得到这个:

string.Join("\x01", new[] { eventCodes }.Concat(data)
    .Select(item => item.ToString()))
最后方法:

public void sendData(string eventCodes, IEnumerable<string> data = null)
{
    if (data != null)
        push(string.Join("\x01", new[] { eventCodes }
            .Concat(data.Select(item => item.ToString()))) + "\x00");
    else
        push(eventCodes + "\x00");
}
就我个人而言,我将更改代码如下:

public void sendData(string eventCodes, IEnumerable<string> data = null)
{
    string element;
    if (data != null)
        element = string.Join("\x01", new[] { eventCodes }
            .Concat(data.Select(item => item.ToString())))
    else
        element = eventCodes;
    push(element + "\x00");
}

mapfunc,iterable与C的iterable.Selectfunc是相似的。在python中,[array]+[array]==[array,array],这只是一个列表连接。@Phoshi:使用单词array表示数组中的一个项有简单的confusing@Eric:正确,我想我在中途改变了这个例子的方向。嗯。[a] +[b]==[a,b]要好得多。mapfunc,iterable与C的iterable.Selectfunc相比是非常相似的。在python中,[array]+[array]==[array,array],这只是一个列表连接。@Phoshi:使用单词array表示数组中的一个项有简单的confusing@Eric:正确,我想我在中途改变了这个例子的方向。嗯。[a] +[b]==[a,b]要好得多。鉴于python代码必须严格区分,数据可能不是IEnumerableit@DominicKexel我不太明白你的意思\x01将向输出添加1个代码点,值为1。应该与Python中的相同。@DominicKexel:C'\x01'中的字符0x01,而\x01是包含该字符的字符串。在python中,单引号和双引号没有区别是的,对不起,我知道。请原谅,我还没有喝咖啡,所以我误读了答案,胡说八道。鉴于python代码必须严格遵守,数据可能不是IEnumerableit@DominicKexel我不太明白你的意思\x01将向输出添加1个代码点,值为1。应该与Python中的相同。@DominicKexel:C'\x01'中的字符0x01,而\x01是包含该字符的字符串。在python中,单引号和双引号没有区别是的,对不起,我知道。原谅我,我还没有咖啡,所以我误读了答案,胡说八道。