将两个列表值合并为一个

时间:2014-12-31 21:42:10

标签: c# asp.net-mvc asp.net-mvc-4

有没有办法将这些项目列入一个列表项?如果这是一个乞丐错误,我很抱歉

List<string> values = new List<string>();
        foreach (Feature f in allFeatures)
        {
            if (f.ColumnValues.ContainsKey(layercode)&& f.ColumnValues.ContainsKey(layercode2))
            {
                if (!values.Contains(f.ColumnValues[layercode].ToString()) && !values.Contains(f.ColumnValues[layercode2].ToString()))
                {
                    values.Add(f.ColumnValues[layercode].ToString());
                    values.Add(f.ColumnValues[layercode2].ToString());


                }
            }

        }

2 个答案:

答案 0 :(得分:2)

您可以使用元组列表,字典或创建类。我不会深入解释这些,因为您应该能够轻松搜索并找到关于这些的所有其他问题。其中一些来自内存,因此语法可能有些偏差。

元组列表

List<Tuple<string,string>> values = new List<Tuple<string,string>>();
//...
if ( !values.Any(v=>v.Item1 == f.ColumnValues[layercode].ToString()) && !values.Any(v=>v.Item2 == f.ColumnValues[layercode2].ToString()) )
{
    values.Add( Tuple.Create(f.ColumnValues[layercode].ToString(),  
                            f.ColumnValues[layercode2].ToString()) );
}

<强>词典

Dictionary<string,string> values = new Dictionary<string,string> ();
//...
if (!values.ContainsKey(f.ColumnValues[layercode].ToString()) && !values.ContainsValue(f.ColumnValues[layercode2].ToString()))
{
    values[f.ColumnValues[layercode].ToString()] = f.ColumnValues[layercode2].ToString();
}

班级实例列表

public class LayerCodePair {
    public string Code1 {get;set;}
    public string Code2 {get;set;}
} // declared outside of method
...

List<LayerCodePair> values = new List<LayerCodePair>();
//...
if (!values.Any(v=> v.Code1 == f.ColumnValues[layercode].ToString()) && !values.Any(v=>v.Code2 == f.ColumnValues[layercode2].ToString()))
{
    values.Add(new LayerCodePair{ 
        Code1 = f.ColumnValues[layercode].ToString(),
        Code2 = f.ColumnValues[layercode2].ToString()
    });
}

答案 1 :(得分:1)

它应该适合你,使用“;”字符作为分隔符:

List<string> values = new List<string>();
foreach (Feature f in allFeatures)
{
    var columnValues = f.ColumnValues;
    var firstLayerCode = columnValues[layercode].ToString();
    var secondLayerCode = columnValues[layercode2].ToString();

    if (columnValues.ContainsKey(layercode) && columnValues.ContainsKey(layercode2))
    {
        if (!values.Contains(firstLayerCode) && !values.Contains(secondLayerCode))
        {
            var combinedValue = firstLayerCode + ";" + secondLayerCode;
            values.Add(combinedValue);
        }
    }
}