将对象列表转换为元组数组

时间:2017-05-02 18:07:56

标签: c# .net list linq tuples

将元组数组和对象列表定义为:

Tuple<string, string, string>[] phone_type 
List<Tele> telecomm

 public class Tele
{   public string number;
    public string displayNumber;
    public string type;
}

我想将List<Tele>中存在的值分配给元组数组。以下代码无效。

obj.phone_type[0] = (Tuple<string,string,string>) obj1.telecommunication[0];

错误说施法是多余的,无法将List转换为Tuple<string,string,string>

是否有一种干净的方法可以将List的特定/所有元素分配给元组数组。

3 个答案:

答案 0 :(得分:6)

拥有:

public class Tele
{   
    public string number;
    public string displayNumber;
    public string type;
}

您可以尝试:

List<Tele> telecomm = //a list of Teles

Tuple<string, string, string>[] phone_type  = 
    telecomm.Select(i => new Tuple<string, string, string>(i.number, i.displayNumber, i.type))
            .ToArray();

编辑:您也可以查看@Kyle评论以获得改进。

答案 1 :(得分:0)

您始终可以向Tele添加方法。你必须写它,但只能写一次。

public Tuple<string, string, string> ToTuple() {
    return new Tuple<string, string, string>(number, displayNumber, type);
}

然后填充数组,就像Hossein的回答一样:

telecom.Select(t => t.ToTuple()).ToArray();

答案 2 :(得分:0)

由于C#现在支持var phone_type = telecom.Select(t => (t.number, t.displayNumber, t.type)).ToArray(); ,因此您也可以使用:

import pandas as pd

for layer in model.layers:
    if layer.name in ['fc1', 'fc2', 'logit']:
       continue
   layer.trainable = False

df = pd.DataFrame(([layer.name, layer.trainable] for layer in model.layers), columns=['layer', 'trainable'])
df.style.applymap(lambda trainable: f'background-color: {"yellow" if trainable else "red"}', subset=['trainable'])